Bug Summary

File:codegen/balaccodebasemodule.c
Warning:line 1085, column 11
Access to field 'ccode' results in a dereference of a null pointer (loaded from variable '_tmp0_')

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name balaccodebasemodule.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib/llvm-11/lib/clang/11.0.1 -D HAVE_CONFIG_H -I . -I .. -D G_LOG_DOMAIN="bala-ccodegen" -I ../gee -I ../ccode -I ../bala -I /usr/include/glib-2.0 -I /usr/lib/x86_64-linux-gnu/glib-2.0/include -D PIC -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-11/lib/clang/11.0.1/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /rootdir/codegen -ferror-limit 19 -fgnuc-version=4.2.1 -analyzer-checker deadcode.DeadStores -analyzer-checker alpha.deadcode.UnreachableCode -analyzer-checker alpha.core.CastSize -analyzer-checker alpha.core.CastToStruct -analyzer-checker alpha.core.IdenticalExpr -analyzer-checker alpha.core.SizeofPtr -analyzer-checker alpha.security.ArrayBoundV2 -analyzer-checker alpha.security.MallocOverflow -analyzer-checker alpha.security.ReturnPtrRange -analyzer-checker alpha.unix.SimpleStream -analyzer-checker alpha.unix.cstring.BufferOverlap -analyzer-checker alpha.unix.cstring.NotNullTerminated -analyzer-checker alpha.unix.cstring.OutOfBounds -analyzer-checker alpha.core.FixedAddr -analyzer-output=html -faddrsig -o /rootdir/html-report/2021-08-06-010600-9652-1 -x c balaccodebasemodule.c
1/* balaccodebasemodule.c generated by balac, the Bala compiler
2 * generated from balaccodebasemodule.bala, do not modify */
3
4/* balaccodebasemodule.bala
5 *
6 * Copyright (C) 2006-2012 Jürg Billeter
7 * Copyright (C) 2006-2008 Raffaele Sandrini
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 *
23 * Author:
24 * Jürg Billeter <j@bitron.ch>
25 * Raffaele Sandrini <raffaele@sandrini.ch>
26 */
27
28#include "balacodegen.h"
29#include <bala.h>
30#include <balagee.h>
31#include <glib-object.h>
32#include <balaccode.h>
33#include <glib.h>
34#include <stdlib.h>
35#include <string.h>
36#include <stdio.h>
37#include <glib/gstdio.h>
38#include <float.h>
39#include <math.h>
40#include <gobject/gvaluecollector.h>
41
42#define _bala_code_context_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_code_context_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_code_context_unref (var), NULL((void*)0))))
43#define _bala_code_node_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_code_node_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_code_node_unref (var), NULL((void*)0))))
44#define _bala_ccode_base_module_emit_context_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_ccode_base_module_emit_context_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_ccode_base_module_emit_context_unref (var), NULL((void*)0))))
45#define _bala_iterable_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_iterable_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_iterable_unref (var), NULL((void*)0))))
46#define _bala_ccode_node_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_ccode_node_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_ccode_node_unref (var), NULL((void*)0))))
47#define _bala_ccode_file_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_ccode_file_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_ccode_file_unref (var), NULL((void*)0))))
48#define _bala_map_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_map_unref (var
), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_map_unref (var), NULL((void*)0))))
49#define _g_free0(var)(var = (g_free (var), ((void*)0))) (var = (g_free (var), NULL((void*)0)))
50#define _bala_source_file_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_source_file_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_source_file_unref (var), NULL((void*)0))))
51#define _fclose0(var)((var == ((void*)0)) ? ((void*)0) : (var = (fclose (var), ((void
*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (fclose (var), NULL((void*)0))))
52#define _bala_comment_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_comment_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_comment_unref (var), NULL((void*)0))))
53#define _bala_ccode_declarator_suffix_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_ccode_declarator_suffix_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_ccode_declarator_suffix_unref (var), NULL((void*)0))))
54#define _bala_target_value_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_target_value_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_target_value_unref (var), NULL((void*)0))))
55#define _bala_iterator_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (bala_iterator_unref
(var), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (bala_iterator_unref (var), NULL((void*)0))))
56#define _g_regex_unref0(var)((var == ((void*)0)) ? ((void*)0) : (var = (g_regex_unref (var
), ((void*)0))))
((var == NULL((void*)0)) ? NULL((void*)0) : (var = (g_regex_unref (var), NULL((void*)0))))
57typedef struct _BalaCCodeBaseModuleParamSpecEmitContext BalaCCodeBaseModuleParamSpecEmitContext;
58#define _bala_assert(expr, msg)if (expr) ; else g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 58, ((const char*) (__func__)), msg);
if G_LIKELY (expr)(expr) ; else g_assertion_message_expr (G_LOG_DOMAIN"bala-ccodegen", __FILE__"balaccodebasemodule.c", __LINE__58, G_STRFUNC((const char*) (__func__)), msg);
59#define _bala_return_if_fail(expr, msg)if (expr) ; else { g_return_if_fail_warning ("bala-ccodegen",
((const char*) (__func__)), msg); return; }
if G_LIKELY (expr)(expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN"bala-ccodegen", G_STRFUNC((const char*) (__func__)), msg); return; }
60#define _bala_return_val_if_fail(expr, msg, val)if (expr) ; else { g_return_if_fail_warning ("bala-ccodegen",
((const char*) (__func__)), msg); return val; }
if G_LIKELY (expr)(expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN"bala-ccodegen", G_STRFUNC((const char*) (__func__)), msg); return val; }
61#define _bala_warn_if_fail(expr, msg)if (expr) ; else g_warn_message ("bala-ccodegen", "balaccodebasemodule.c"
, 61, ((const char*) (__func__)), msg);
if G_LIKELY (expr)(expr) ; else g_warn_message (G_LOG_DOMAIN"bala-ccodegen", __FILE__"balaccodebasemodule.c", __LINE__61, G_STRFUNC((const char*) (__func__)), msg);
62
63struct _BalaCCodeBaseModulePrivate {
64 BalaCodeContext* _context;
65 BalaList* emit_context_stack;
66 BalaList* line_directive_stack;
67 gint next_block_id;
68 BalaMap* block_map;
69 BalaMap* method_inner_error_var_count;
70 BalaDelegate* destroy_notify;
71 BalaClass* gerror;
72 BalaSet* generated_external_symbols;
73 gint next_variant_function_id;
74};
75
76struct _BalaCCodeBaseModuleParamSpecEmitContext {
77 GParamSpec parent_instance;
78};
79
80static gint BalaCCodeBaseModule_private_offset;
81static gpointer bala_ccode_base_module_parent_class = NULL((void*)0);
82BalaSet* bala_ccode_base_module_reserved_identifiers = NULL((void*)0);
83gint bala_ccode_base_module_ccode_attribute_cache_index = 0;
84static gpointer bala_ccode_base_module_emit_context_parent_class = NULL((void*)0);
85
86static void bala_ccode_base_module_real_emit (BalaCodeGenerator* base,
87 BalaCodeContext* context);
88static void bala_ccode_base_module_real_append_bala_array_free (BalaCCodeBaseModule* self);
89static void bala_ccode_base_module_real_append_bala_array_move (BalaCCodeBaseModule* self);
90static void bala_ccode_base_module_real_append_bala_array_length (BalaCCodeBaseModule* self);
91static void bala_ccode_base_module_real_append_params_array (BalaCCodeBaseModule* self,
92 BalaMethod* m);
93static void bala_ccode_base_module_real_visit_source_file (BalaCodeVisitor* base,
94 BalaSourceFile* source_file);
95static gboolean bala_ccode_base_module_real_generate_enum_declaration (BalaCCodeBaseModule* self,
96 BalaEnum* en,
97 BalaCCodeFile* decl_space);
98static void bala_ccode_base_module_real_visit_enum (BalaCodeVisitor* base,
99 BalaEnum* en);
100static void bala_ccode_base_module_constant_array_ranks_sizes (BalaInitializerList* initializer_list,
101 gint* sizes,
102 gint sizes_length1,
103 gint rank);
104static BalaCCodeDeclaratorSuffix* bala_ccode_base_module_get_constant_declarator_suffix (BalaCCodeBaseModule* self,
105 BalaConstant* c);
106static void bala_ccode_base_module_real_visit_constant (BalaCodeVisitor* base,
107 BalaConstant* c);
108static void bala_ccode_base_module_real_visit_field (BalaCodeVisitor* base,
109 BalaField* f);
110static void bala_ccode_base_module_real_visit_property (BalaCodeVisitor* base,
111 BalaProperty* prop);
112static void bala_ccode_base_module_real_generate_class_struct_declaration (BalaCCodeBaseModule* self,
113 BalaClass* cl,
114 BalaCCodeFile* decl_space);
115static void bala_ccode_base_module_real_generate_struct_declaration (BalaCCodeBaseModule* self,
116 BalaStruct* st,
117 BalaCCodeFile* decl_space);
118static void bala_ccode_base_module_real_generate_delegate_declaration (BalaCCodeBaseModule* self,
119 BalaDelegate* d,
120 BalaCCodeFile* decl_space);
121static void bala_ccode_base_module_real_generate_cparameters (BalaCCodeBaseModule* self,
122 BalaMethod* m,
123 BalaCCodeFile* decl_space,
124 BalaMap* cparam_map,
125 BalaCCodeFunction* func,
126 BalaCCodeFunctionDeclarator* vdeclarator,
127 BalaMap* carg_map,
128 BalaCCodeFunctionCall* vcall,
129 gint direction);
130static void bala_ccode_base_module_real_visit_property_accessor (BalaCodeVisitor* base,
131 BalaPropertyAccessor* acc);
132static void bala_ccode_base_module_create_property_type_check_statement (BalaCCodeBaseModule* self,
133 BalaProperty* prop,
134 gboolean check_return_type,
135 BalaTypeSymbol* t,
136 gboolean non_null,
137 const gchar* var_name);
138static gchar* bala_ccode_base_module_generate_cmp_wrapper (BalaCCodeBaseModule* self,
139 BalaCCodeIdentifier* cmpid);
140static gchar* bala_ccode_base_module_generate_struct_equal_function (BalaCCodeBaseModule* self,
141 BalaStruct* st);
142static void bala_ccode_base_module_real_visit_destructor (BalaCodeVisitor* base,
143 BalaDestructor* d);
144static void bala_ccode_base_module_capture_parameter (BalaCCodeBaseModule* self,
145 BalaParameter* param,
146 BalaCCodeStruct* data,
147 gint block_id);
148static void bala_ccode_base_module_real_visit_block (BalaCodeVisitor* base,
149 BalaBlock* b);
150static void bala_ccode_base_module_real_visit_declaration_statement (BalaCodeVisitor* base,
151 BalaDeclarationStatement* stmt);
152static gboolean bala_ccode_base_module_is_foreach_element_variable (BalaLocalVariable* local);
153static void bala_ccode_base_module_real_visit_local_variable (BalaCodeVisitor* base,
154 BalaLocalVariable* local);
155static void bala_ccode_base_module_real_visit_initializer_list (BalaCodeVisitor* base,
156 BalaInitializerList* list);
157static gboolean bala_ccode_base_module_is_in_generic_type (BalaCCodeBaseModule* self,
158 BalaGenericType* type);
159static void bala_ccode_base_module_require_generic_accessors (BalaCCodeBaseModule* self,
160 BalaInterface* iface);
161static BalaCCodeExpression* bala_ccode_base_module_real_get_dup_func_expression (BalaCCodeBaseModule* self,
162 BalaDataType* type,
163 BalaSourceReference* source_reference,
164 gboolean is_chainup);
165static gchar* bala_ccode_base_module_generate_struct_dup_wrapper (BalaCCodeBaseModule* self,
166 BalaValueType* value_type);
167static void bala_ccode_base_module_make_comparable_cexpression (BalaCCodeBaseModule* self,
168 BalaDataType* * left_type,
169 BalaCCodeExpression* * cleft,
170 BalaDataType* * right_type,
171 BalaCCodeExpression* * cright);
172static gchar* bala_ccode_base_module_generate_numeric_equal_function (BalaCCodeBaseModule* self,
173 BalaTypeSymbol* sym);
174static void bala_ccode_base_module_generate_struct_copy_function (BalaCCodeBaseModule* self,
175 BalaStruct* st);
176static void bala_ccode_base_module_generate_struct_destroy_function (BalaCCodeBaseModule* self,
177 BalaStruct* st);
178static gchar* bala_ccode_base_module_generate_collection_free_wrapper (BalaCCodeBaseModule* self,
179 BalaDataType* collection_type,
180 BalaCCodeIdentifier* element_destroy_func_expression);
181static gchar* bala_ccode_base_module_real_append_struct_array_destroy (BalaCCodeBaseModule* self,
182 BalaStruct* st);
183static gchar* bala_ccode_base_module_real_append_struct_array_free (BalaCCodeBaseModule* self,
184 BalaStruct* st);
185static BalaCCodeExpression* bala_ccode_base_module_real_destroy_value (BalaCCodeBaseModule* self,
186 BalaTargetValue* value,
187 gboolean is_macro_definition);
188static void bala_ccode_base_module_real_visit_end_full_expression (BalaCodeVisitor* base,
189 BalaExpression* expr);
190static void bala_ccode_base_module_real_visit_expression_statement (BalaCodeVisitor* base,
191 BalaExpressionStatement* stmt);
192static void bala_ccode_base_module_real_append_scope_free (BalaCCodeBaseModule* self,
193 BalaSymbol* sym,
194 BalaCodeNode* stop_at);
195static void bala_ccode_base_module_append_param_free (BalaCCodeBaseModule* self,
196 BalaMethod* m);
197static void bala_ccode_base_module_real_visit_return_statement (BalaCodeVisitor* base,
198 BalaReturnStatement* stmt);
199static BalaCCodeExpression* bala_ccode_base_module_get_lock_expression (BalaCCodeBaseModule* self,
200 BalaStatement* stmt,
201 BalaExpression* resource);
202static void bala_ccode_base_module_real_visit_lock_statement (BalaCodeVisitor* base,
203 BalaLockStatement* stmt);
204static void bala_ccode_base_module_real_visit_unlock_statement (BalaCodeVisitor* base,
205 BalaUnlockStatement* stmt);
206static void bala_ccode_base_module_real_visit_delete_statement (BalaCodeVisitor* base,
207 BalaDeleteStatement* stmt);
208static gboolean bala_ccode_base_module_is_compact_class_destructor_call (BalaExpression* expr);
209static void bala_ccode_base_module_real_visit_expression (BalaCodeVisitor* base,
210 BalaExpression* expr);
211static void bala_ccode_base_module_real_visit_boolean_literal (BalaCodeVisitor* base,
212 BalaBooleanLiteral* expr);
213static void bala_ccode_base_module_real_visit_character_literal (BalaCodeVisitor* base,
214 BalaCharacterLiteral* expr);
215static void bala_ccode_base_module_real_visit_integer_literal (BalaCodeVisitor* base,
216 BalaIntegerLiteral* expr);
217static void bala_ccode_base_module_real_visit_real_literal (BalaCodeVisitor* base,
218 BalaRealLiteral* expr);
219static void bala_ccode_base_module_real_visit_string_literal (BalaCodeVisitor* base,
220 BalaStringLiteral* expr);
221static void bala_ccode_base_module_real_visit_regex_literal (BalaCodeVisitor* base,
222 BalaRegexLiteral* expr);
223static void bala_ccode_base_module_real_visit_null_literal (BalaCodeVisitor* base,
224 BalaNullLiteral* expr);
225static BalaTargetValue* bala_ccode_base_module_real_get_local_cvalue (BalaCCodeBaseModule* self,
226 BalaLocalVariable* local);
227static BalaTargetValue* bala_ccode_base_module_real_get_parameter_cvalue (BalaCCodeBaseModule* self,
228 BalaParameter* param);
229static BalaTargetValue* bala_ccode_base_module_real_get_field_cvalue (BalaCCodeBaseModule* self,
230 BalaField* field,
231 BalaTargetValue* instance);
232static BalaTargetValue* bala_ccode_base_module_real_load_variable (BalaCCodeBaseModule* self,
233 BalaVariable* variable,
234 BalaTargetValue* value,
235 BalaExpression* expr);
236static BalaTargetValue* bala_ccode_base_module_real_load_this_parameter (BalaCCodeBaseModule* self,
237 BalaTypeSymbol* sym);
238static void bala_ccode_base_module_real_store_value (BalaCCodeBaseModule* self,
239 BalaTargetValue* lvalue,
240 BalaTargetValue* value,
241 BalaSourceReference* source_reference);
242static gchar* bala_ccode_base_module_real_get_delegate_target_cname (BalaCCodeBaseModule* self,
243 const gchar* delegate_cname);
244static BalaCCodeExpression* bala_ccode_base_module_real_get_delegate_target_cexpression (BalaCCodeBaseModule* self,
245 BalaExpression* delegate_expr,
246 BalaCCodeExpression* * delegate_target_destroy_notify);
247static BalaCCodeExpression* bala_ccode_base_module_real_get_delegate_target_cvalue (BalaCCodeBaseModule* self,
248 BalaTargetValue* value);
249static BalaCCodeExpression* bala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue (BalaCCodeBaseModule* self,
250 BalaTargetValue* value);
251static gchar* bala_ccode_base_module_real_get_delegate_target_destroy_notify_cname (BalaCCodeBaseModule* self,
252 const gchar* delegate_cname);
253static void bala_ccode_base_module_real_visit_base_access (BalaCodeVisitor* base,
254 BalaBaseAccess* expr);
255static void bala_ccode_base_module_real_visit_postfix_expression (BalaCodeVisitor* base,
256 BalaPostfixExpression* expr);
257static BalaMemberAccess* bala_ccode_base_module_find_property_access (BalaCCodeBaseModule* self,
258 BalaExpression* expr);
259static gboolean bala_ccode_base_module_is_limited_generic_type (BalaGenericType* type);
260static BalaTargetValue* bala_ccode_base_module_real_copy_value (BalaCCodeBaseModule* self,
261 BalaTargetValue* value,
262 BalaCodeNode* node);
263static void bala_ccode_base_module_real_generate_class_declaration (BalaCCodeBaseModule* self,
264 BalaClass* cl,
265 BalaCCodeFile* decl_space);
266static void bala_ccode_base_module_real_generate_interface_declaration (BalaCCodeBaseModule* self,
267 BalaInterface* iface,
268 BalaCCodeFile* decl_space);
269static gboolean bala_ccode_base_module_real_generate_method_declaration (BalaCCodeBaseModule* self,
270 BalaMethod* m,
271 BalaCCodeFile* decl_space);
272static void bala_ccode_base_module_real_generate_error_domain_declaration (BalaCCodeBaseModule* self,
273 BalaErrorDomain* edomain,
274 BalaCCodeFile* decl_space);
275static void bala_ccode_base_module_real_visit_object_creation_expression (BalaCodeVisitor* base,
276 BalaObjectCreationExpression* expr);
277static void bala_ccode_base_module_real_visit_sizeof_expression (BalaCodeVisitor* base,
278 BalaSizeofExpression* expr);
279static void bala_ccode_base_module_real_visit_typeof_expression (BalaCodeVisitor* base,
280 BalaTypeofExpression* expr);
281static void bala_ccode_base_module_real_visit_unary_expression (BalaCodeVisitor* base,
282 BalaUnaryExpression* expr);
283static BalaCCodeExpression* bala_ccode_base_module_real_deserialize_expression (BalaCCodeBaseModule* self,
284 BalaDataType* type,
285 BalaCCodeExpression* variant_expr,
286 BalaCCodeExpression* expr,
287 BalaCCodeExpression* error_expr,
288 gboolean* may_fail);
289static BalaCCodeExpression* bala_ccode_base_module_real_serialize_expression (BalaCCodeBaseModule* self,
290 BalaDataType* type,
291 BalaCCodeExpression* expr);
292static void bala_ccode_base_module_real_visit_cast_expression (BalaCodeVisitor* base,
293 BalaCastExpression* expr);
294static void bala_ccode_base_module_real_visit_named_argument (BalaCodeVisitor* base,
295 BalaNamedArgument* expr);
296static void bala_ccode_base_module_real_visit_pointer_indirection (BalaCodeVisitor* base,
297 BalaPointerIndirection* expr);
298static void bala_ccode_base_module_real_visit_addressof_expression (BalaCodeVisitor* base,
299 BalaAddressofExpression* expr);
300static void bala_ccode_base_module_real_visit_reference_transfer_expression (BalaCodeVisitor* base,
301 BalaReferenceTransferExpression* expr);
302static void bala_ccode_base_module_real_visit_binary_expression (BalaCodeVisitor* base,
303 BalaBinaryExpression* expr);
304static gchar* bala_ccode_base_module_generate_array_contains_wrapper (BalaCCodeBaseModule* self,
305 BalaArrayType* array_type);
306static void bala_ccode_base_module_real_visit_type_check (BalaCodeVisitor* base,
307 BalaTypeCheck* expr);
308static void bala_ccode_base_module_real_visit_lambda_expression (BalaCodeVisitor* base,
309 BalaLambdaExpression* lambda);
310static BalaCCodeExpression* bala_ccode_base_module_real_get_implicit_cast_expression (BalaCCodeBaseModule* self,
311 BalaCCodeExpression* source_cexpr,
312 BalaDataType* expression_type,
313 BalaDataType* target_type,
314 BalaCodeNode* node);
315static void bala_ccode_base_module_real_create_type_check_statement (BalaCCodeBaseModule* self,
316 BalaCodeNode* method_node,
317 BalaDataType* ret_type,
318 BalaTypeSymbol* t,
319 gboolean non_null,
320 const gchar* var_name);
321static void bala_ccode_base_module_real_visit_class (BalaCodeVisitor* base,
322 BalaClass* cl);
323static void bala_ccode_base_module_real_generate_dynamic_method_wrapper (BalaCCodeBaseModule* self,
324 BalaDynamicMethod* method);
325static gboolean bala_ccode_base_module_real_method_has_wrapper (BalaCCodeBaseModule* self,
326 BalaMethod* method);
327static BalaCCodeExpression* bala_ccode_base_module_real_get_param_spec_cexpression (BalaCCodeBaseModule* self,
328 BalaProperty* prop);
329static BalaCCodeExpression* bala_ccode_base_module_real_get_param_spec (BalaCCodeBaseModule* self,
330 BalaProperty* prop);
331static BalaCCodeExpression* bala_ccode_base_module_real_get_signal_creation (BalaCCodeBaseModule* self,
332 BalaSignal* sig,
333 BalaObjectTypeSymbol* type);
334static BalaCCodeExpression* bala_ccode_base_module_real_get_value_getter_function (BalaCCodeBaseModule* self,
335 BalaDataType* type_reference);
336static BalaCCodeExpression* bala_ccode_base_module_real_get_value_setter_function (BalaCCodeBaseModule* self,
337 BalaDataType* type_reference);
338static BalaCCodeExpression* bala_ccode_base_module_real_get_value_taker_function (BalaCCodeBaseModule* self,
339 BalaDataType* type_reference);
340static void bala_ccode_base_module_real_register_dbus_info (BalaCCodeBaseModule* self,
341 BalaCCodeBlock* block,
342 BalaObjectTypeSymbol* bindable);
343static gchar* bala_ccode_base_module_real_get_dynamic_property_getter_cname (BalaCCodeBaseModule* self,
344 BalaDynamicProperty* node);
345static gchar* bala_ccode_base_module_real_get_dynamic_property_setter_cname (BalaCCodeBaseModule* self,
346 BalaDynamicProperty* node);
347static gchar* bala_ccode_base_module_real_get_dynamic_signal_cname (BalaCCodeBaseModule* self,
348 BalaDynamicSignal* node);
349static gchar* bala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name (BalaCCodeBaseModule* self,
350 BalaDynamicSignal* node);
351static gchar* bala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name (BalaCCodeBaseModule* self,
352 BalaDynamicSignal* node);
353static gchar* bala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name (BalaCCodeBaseModule* self,
354 BalaDynamicSignal* node);
355static gchar* bala_ccode_base_module_real_get_array_length_cname (BalaCCodeBaseModule* self,
356 const gchar* array_cname,
357 gint dim);
358static gchar* bala_ccode_base_module_real_get_variable_array_length_cname (BalaCCodeBaseModule* self,
359 BalaVariable* variable,
360 gint dim);
361static BalaCCodeExpression* bala_ccode_base_module_real_get_array_length_cexpression (BalaCCodeBaseModule* self,
362 BalaExpression* array_expr,
363 gint dim);
364static BalaCCodeExpression* bala_ccode_base_module_real_get_array_length_cvalue (BalaCCodeBaseModule* self,
365 BalaTargetValue* value,
366 gint dim);
367static gchar* bala_ccode_base_module_real_get_array_size_cname (BalaCCodeBaseModule* self,
368 const gchar* array_cname);
369static void bala_ccode_base_module_real_add_simple_check (BalaCCodeBaseModule* self,
370 BalaCodeNode* node,
371 gboolean always_fails);
372static gchar* bala_ccode_base_module_real_generate_ready_function (BalaCCodeBaseModule* self,
373 BalaMethod* m);
374static void bala_ccode_base_module_emit_context_finalize (BalaCCodeBaseModuleEmitContext * obj);
375static GType bala_ccode_base_module_emit_context_get_type_once (void);
376static void bala_ccode_base_module_finalize (BalaCodeVisitor * obj);
377static GType bala_ccode_base_module_get_type_once (void);
378static void _bala_array_destroy (gpointer array,
379 gint array_length,
380 GDestroyNotify destroy_func);
381static void _bala_array_free (gpointer array,
382 gint array_length,
383 GDestroyNotify destroy_func);
384static gint _bala_array_length (gpointer array);
385
386static inline gpointer
387bala_ccode_base_module_get_instance_private (BalaCCodeBaseModule* self)
388{
389 return G_STRUCT_MEMBER_P (self, BalaCCodeBaseModule_private_offset)((gpointer) ((guint8*) (self) + (glong) (BalaCCodeBaseModule_private_offset
)))
;
390}
391
392BalaCodeContext*
393bala_ccode_base_module_get_context (BalaCCodeBaseModule* self)
394{
395 BalaCodeContext* result;
396 BalaCodeContext* _tmp0_;
397 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
398 _tmp0_ = self->priv->_context;
399 result = _tmp0_;
400 return result;
401}
402
403static gpointer
404_bala_code_context_ref0 (gpointer self)
405{
406 return self ? bala_code_context_ref (self) : NULL((void*)0);
407}
408
409void
410bala_ccode_base_module_set_context (BalaCCodeBaseModule* self,
411 BalaCodeContext* value)
412{
413 BalaCodeContext* _tmp0_;
414 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
415 _tmp0_ = _bala_code_context_ref0 (value);
416 _bala_code_context_unref0 (self->priv->_context)((self->priv->_context == ((void*)0)) ? ((void*)0) : (self
->priv->_context = (bala_code_context_unref (self->priv
->_context), ((void*)0))))
;
417 self->priv->_context = _tmp0_;
418}
419
420BalaSymbol*
421bala_ccode_base_module_get_current_symbol (BalaCCodeBaseModule* self)
422{
423 BalaSymbol* result;
424 BalaCCodeBaseModuleEmitContext* _tmp0_;
425 BalaSymbol* _tmp1_;
426 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
427 _tmp0_ = self->emit_context;
428 _tmp1_ = _tmp0_->current_symbol;
429 result = _tmp1_;
430 return result;
431}
432
433BalaTryStatement*
434bala_ccode_base_module_get_current_try (BalaCCodeBaseModule* self)
435{
436 BalaTryStatement* result;
437 BalaCCodeBaseModuleEmitContext* _tmp0_;
438 BalaTryStatement* _tmp1_;
439 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
440 _tmp0_ = self->emit_context;
441 _tmp1_ = _tmp0_->current_try;
442 result = _tmp1_;
443 return result;
444}
445
446static gpointer
447_bala_code_node_ref0 (gpointer self)
448{
449 return self ? bala_code_node_ref (self) : NULL((void*)0);
450}
451
452void
453bala_ccode_base_module_set_current_try (BalaCCodeBaseModule* self,
454 BalaTryStatement* value)
455{
456 BalaCCodeBaseModuleEmitContext* _tmp0_;
457 BalaTryStatement* _tmp1_;
458 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
459 _tmp0_ = self->emit_context;
460 _tmp1_ = _bala_code_node_ref0 (value);
461 _bala_code_node_unref0 (_tmp0_->current_try)((_tmp0_->current_try == ((void*)0)) ? ((void*)0) : (_tmp0_
->current_try = (bala_code_node_unref (_tmp0_->current_try
), ((void*)0))))
;
462 _tmp0_->current_try = _tmp1_;
463}
464
465gint
466bala_ccode_base_module_get_current_try_id (BalaCCodeBaseModule* self)
467{
468 gint result;
469 BalaCCodeBaseModuleEmitContext* _tmp0_;
470 g_return_val_if_fail (self != NULL, 0)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (0); } } while (0)
;
471 _tmp0_ = self->emit_context;
472 result = _tmp0_->current_try_id;
473 return result;
474}
475
476void
477bala_ccode_base_module_set_current_try_id (BalaCCodeBaseModule* self,
478 gint value)
479{
480 BalaCCodeBaseModuleEmitContext* _tmp0_;
481 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
482 _tmp0_ = self->emit_context;
483 _tmp0_->current_try_id = value;
484}
485
486gint
487bala_ccode_base_module_get_next_try_id (BalaCCodeBaseModule* self)
488{
489 gint result;
490 BalaCCodeBaseModuleEmitContext* _tmp0_;
491 g_return_val_if_fail (self != NULL, 0)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (0); } } while (0)
;
492 _tmp0_ = self->emit_context;
493 result = _tmp0_->next_try_id;
494 return result;
495}
496
497void
498bala_ccode_base_module_set_next_try_id (BalaCCodeBaseModule* self,
499 gint value)
500{
501 BalaCCodeBaseModuleEmitContext* _tmp0_;
502 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
503 _tmp0_ = self->emit_context;
504 _tmp0_->next_try_id = value;
505}
506
507BalaCatchClause*
508bala_ccode_base_module_get_current_catch (BalaCCodeBaseModule* self)
509{
510 BalaCatchClause* result;
511 BalaCCodeBaseModuleEmitContext* _tmp0_;
512 BalaCatchClause* _tmp1_;
513 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
514 _tmp0_ = self->emit_context;
515 _tmp1_ = _tmp0_->current_catch;
516 result = _tmp1_;
517 return result;
518}
519
520void
521bala_ccode_base_module_set_current_catch (BalaCCodeBaseModule* self,
522 BalaCatchClause* value)
523{
524 BalaCCodeBaseModuleEmitContext* _tmp0_;
525 BalaCatchClause* _tmp1_;
526 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
527 _tmp0_ = self->emit_context;
528 _tmp1_ = _bala_code_node_ref0 (value);
529 _bala_code_node_unref0 (_tmp0_->current_catch)((_tmp0_->current_catch == ((void*)0)) ? ((void*)0) : (_tmp0_
->current_catch = (bala_code_node_unref (_tmp0_->current_catch
), ((void*)0))))
;
530 _tmp0_->current_catch = _tmp1_;
531}
532
533gint
534bala_ccode_base_module_get_current_inner_error_id (BalaCCodeBaseModule* self)
535{
536 gint result;
537 BalaCCodeBaseModuleEmitContext* _tmp0_;
538 g_return_val_if_fail (self != NULL, 0)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (0); } } while (0)
;
539 _tmp0_ = self->emit_context;
540 result = _tmp0_->current_inner_error_id;
541 return result;
542}
543
544void
545bala_ccode_base_module_set_current_inner_error_id (BalaCCodeBaseModule* self,
546 gint value)
547{
548 BalaCCodeBaseModuleEmitContext* _tmp0_;
549 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
550 _tmp0_ = self->emit_context;
551 _tmp0_->current_inner_error_id = value;
552}
553
554gboolean
555bala_ccode_base_module_get_is_in_method_precondition (BalaCCodeBaseModule* self)
556{
557 gboolean result;
558 BalaCCodeBaseModuleEmitContext* _tmp0_;
559 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
560 _tmp0_ = self->emit_context;
561 result = _tmp0_->is_in_method_precondition;
562 return result;
563}
564
565void
566bala_ccode_base_module_set_is_in_method_precondition (BalaCCodeBaseModule* self,
567 gboolean value)
568{
569 BalaCCodeBaseModuleEmitContext* _tmp0_;
570 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
571 _tmp0_ = self->emit_context;
572 _tmp0_->is_in_method_precondition = value;
573}
574
575BalaTypeSymbol*
576bala_ccode_base_module_get_current_type_symbol (BalaCCodeBaseModule* self)
577{
578 BalaTypeSymbol* result;
579 BalaSymbol* sym = NULL((void*)0);
580 BalaSymbol* _tmp0_;
581 BalaSymbol* _tmp1_;
582 BalaSymbol* _tmp2_;
583 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
584 _tmp0_ = bala_ccode_base_module_get_current_symbol (self);
585 _tmp1_ = _tmp0_;
586 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
587 sym = _tmp2_;
588 while (TRUE(!(0))) {
589 BalaSymbol* _tmp3_;
590 BalaSymbol* _tmp4_;
591 BalaSymbol* _tmp6_;
592 BalaSymbol* _tmp7_;
593 BalaSymbol* _tmp8_;
594 BalaSymbol* _tmp9_;
595 _tmp3_ = sym;
596 if (!(_tmp3_ != NULL((void*)0))) {
597 break;
598 }
599 _tmp4_ = sym;
600 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, BALA_TYPE_TYPESYMBOL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp4_); GType __t = ((bala_typesymbol_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
601 BalaSymbol* _tmp5_;
602 _tmp5_ = sym;
603 result = G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp5_), ((bala_typesymbol_get_type ())))))
;
604 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
605 return result;
606 }
607 _tmp6_ = sym;
608 _tmp7_ = bala_symbol_get_parent_symbol (_tmp6_);
609 _tmp8_ = _tmp7_;
610 _tmp9_ = _bala_code_node_ref0 (_tmp8_);
611 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
612 sym = _tmp9_;
613 }
614 result = NULL((void*)0);
615 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
616 return result;
617}
618
619BalaClass*
620bala_ccode_base_module_get_current_class (BalaCCodeBaseModule* self)
621{
622 BalaClass* result;
623 BalaTypeSymbol* _tmp0_;
624 BalaTypeSymbol* _tmp1_;
625 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
626 _tmp0_ = bala_ccode_base_module_get_current_type_symbol (self);
627 _tmp1_ = _tmp0_;
628 result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp1_) : NULL((void*)0);
629 return result;
630}
631
632BalaMethod*
633bala_ccode_base_module_get_current_method (BalaCCodeBaseModule* self)
634{
635 BalaMethod* result;
636 BalaSymbol* sym = NULL((void*)0);
637 BalaSymbol* _tmp0_;
638 BalaSymbol* _tmp1_;
639 BalaSymbol* _tmp2_;
640 BalaSymbol* _tmp8_;
641 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
642 _tmp0_ = bala_ccode_base_module_get_current_symbol (self);
643 _tmp1_ = _tmp0_;
644 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
645 sym = _tmp2_;
646 while (TRUE(!(0))) {
647 BalaSymbol* _tmp3_;
648 BalaSymbol* _tmp4_;
649 BalaSymbol* _tmp5_;
650 BalaSymbol* _tmp6_;
651 BalaSymbol* _tmp7_;
652 _tmp3_ = sym;
653 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
654 break;
655 }
656 _tmp4_ = sym;
657 _tmp5_ = bala_symbol_get_parent_symbol (_tmp4_);
658 _tmp6_ = _tmp5_;
659 _tmp7_ = _bala_code_node_ref0 (_tmp6_);
660 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
661 sym = _tmp7_;
662 }
663 _tmp8_ = sym;
664 result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaMethod*) _tmp8_) : NULL((void*)0);
665 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
666 return result;
667}
668
669BalaPropertyAccessor*
670bala_ccode_base_module_get_current_property_accessor (BalaCCodeBaseModule* self)
671{
672 BalaPropertyAccessor* result;
673 BalaSymbol* sym = NULL((void*)0);
674 BalaSymbol* _tmp0_;
675 BalaSymbol* _tmp1_;
676 BalaSymbol* _tmp2_;
677 BalaSymbol* _tmp8_;
678 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
679 _tmp0_ = bala_ccode_base_module_get_current_symbol (self);
680 _tmp1_ = _tmp0_;
681 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
682 sym = _tmp2_;
683 while (TRUE(!(0))) {
684 BalaSymbol* _tmp3_;
685 BalaSymbol* _tmp4_;
686 BalaSymbol* _tmp5_;
687 BalaSymbol* _tmp6_;
688 BalaSymbol* _tmp7_;
689 _tmp3_ = sym;
690 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
691 break;
692 }
693 _tmp4_ = sym;
694 _tmp5_ = bala_symbol_get_parent_symbol (_tmp4_);
695 _tmp6_ = _tmp5_;
696 _tmp7_ = _bala_code_node_ref0 (_tmp6_);
697 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
698 sym = _tmp7_;
699 }
700 _tmp8_ = sym;
701 result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_PROPERTY_ACCESSOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_property_accessor_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaPropertyAccessor*) _tmp8_) : NULL((void*)0);
702 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
703 return result;
704}
705
706BalaConstructor*
707bala_ccode_base_module_get_current_constructor (BalaCCodeBaseModule* self)
708{
709 BalaConstructor* result;
710 BalaSymbol* sym = NULL((void*)0);
711 BalaSymbol* _tmp0_;
712 BalaSymbol* _tmp1_;
713 BalaSymbol* _tmp2_;
714 BalaSymbol* _tmp8_;
715 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
716 _tmp0_ = bala_ccode_base_module_get_current_symbol (self);
717 _tmp1_ = _tmp0_;
718 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
719 sym = _tmp2_;
720 while (TRUE(!(0))) {
721 BalaSymbol* _tmp3_;
722 BalaSymbol* _tmp4_;
723 BalaSymbol* _tmp5_;
724 BalaSymbol* _tmp6_;
725 BalaSymbol* _tmp7_;
726 _tmp3_ = sym;
727 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
728 break;
729 }
730 _tmp4_ = sym;
731 _tmp5_ = bala_symbol_get_parent_symbol (_tmp4_);
732 _tmp6_ = _tmp5_;
733 _tmp7_ = _bala_code_node_ref0 (_tmp6_);
734 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
735 sym = _tmp7_;
736 }
737 _tmp8_ = sym;
738 result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_CONSTRUCTOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_constructor_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaConstructor*) _tmp8_) : NULL((void*)0);
739 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
740 return result;
741}
742
743BalaDestructor*
744bala_ccode_base_module_get_current_destructor (BalaCCodeBaseModule* self)
745{
746 BalaDestructor* result;
747 BalaSymbol* sym = NULL((void*)0);
748 BalaSymbol* _tmp0_;
749 BalaSymbol* _tmp1_;
750 BalaSymbol* _tmp2_;
751 BalaSymbol* _tmp8_;
752 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
753 _tmp0_ = bala_ccode_base_module_get_current_symbol (self);
754 _tmp1_ = _tmp0_;
755 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
756 sym = _tmp2_;
757 while (TRUE(!(0))) {
758 BalaSymbol* _tmp3_;
759 BalaSymbol* _tmp4_;
760 BalaSymbol* _tmp5_;
761 BalaSymbol* _tmp6_;
762 BalaSymbol* _tmp7_;
763 _tmp3_ = sym;
764 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
765 break;
766 }
767 _tmp4_ = sym;
768 _tmp5_ = bala_symbol_get_parent_symbol (_tmp4_);
769 _tmp6_ = _tmp5_;
770 _tmp7_ = _bala_code_node_ref0 (_tmp6_);
771 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
772 sym = _tmp7_;
773 }
774 _tmp8_ = sym;
775 result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_DESTRUCTOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_destructor_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaDestructor*) _tmp8_) : NULL((void*)0);
776 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
777 return result;
778}
779
780BalaDataType*
781bala_ccode_base_module_get_current_return_type (BalaCCodeBaseModule* self)
782{
783 BalaDataType* result;
784 BalaMethod* m = NULL((void*)0);
785 BalaMethod* _tmp0_;
786 BalaMethod* _tmp1_;
787 BalaMethod* _tmp2_;
788 BalaMethod* _tmp3_;
789 BalaPropertyAccessor* acc = NULL((void*)0);
790 BalaPropertyAccessor* _tmp7_;
791 BalaPropertyAccessor* _tmp8_;
792 BalaPropertyAccessor* _tmp9_;
793 BalaPropertyAccessor* _tmp10_;
794 gboolean _tmp18_ = FALSE(0);
795 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
796 _tmp0_ = bala_ccode_base_module_get_current_method (self);
797 _tmp1_ = _tmp0_;
798 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
799 m = _tmp2_;
800 _tmp3_ = m;
801 if (_tmp3_ != NULL((void*)0)) {
802 BalaMethod* _tmp4_;
803 BalaDataType* _tmp5_;
804 BalaDataType* _tmp6_;
805 _tmp4_ = m;
806 _tmp5_ = bala_callable_get_return_type ((BalaCallable*) _tmp4_);
807 _tmp6_ = _tmp5_;
808 result = _tmp6_;
809 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
810 return result;
811 }
812 _tmp7_ = bala_ccode_base_module_get_current_property_accessor (self);
813 _tmp8_ = _tmp7_;
814 _tmp9_ = _bala_code_node_ref0 (_tmp8_);
815 acc = _tmp9_;
816 _tmp10_ = acc;
817 if (_tmp10_ != NULL((void*)0)) {
818 BalaPropertyAccessor* _tmp11_;
819 gboolean _tmp12_;
820 gboolean _tmp13_;
821 _tmp11_ = acc;
822 _tmp12_ = bala_property_accessor_get_readable (_tmp11_);
823 _tmp13_ = _tmp12_;
824 if (_tmp13_) {
825 BalaPropertyAccessor* _tmp14_;
826 BalaDataType* _tmp15_;
827 BalaDataType* _tmp16_;
828 _tmp14_ = acc;
829 _tmp15_ = bala_property_accessor_get_value_type (_tmp14_);
830 _tmp16_ = _tmp15_;
831 result = _tmp16_;
832 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
833 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
834 return result;
835 } else {
836 BalaDataType* _tmp17_;
837 _tmp17_ = self->void_type;
838 result = _tmp17_;
839 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
840 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
841 return result;
842 }
843 }
844 if (bala_ccode_base_module_is_in_constructor (self)) {
845 _tmp18_ = TRUE(!(0));
846 } else {
847 _tmp18_ = bala_ccode_base_module_is_in_destructor (self);
848 }
849 if (_tmp18_) {
850 BalaDataType* _tmp19_;
851 _tmp19_ = self->void_type;
852 result = _tmp19_;
853 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
854 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
855 return result;
856 }
857 result = NULL((void*)0);
858 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
859 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
860 return result;
861}
862
863gboolean
864bala_ccode_base_module_is_in_coroutine (BalaCCodeBaseModule* self)
865{
866 gboolean _tmp0_ = FALSE(0);
867 BalaMethod* _tmp1_;
868 BalaMethod* _tmp2_;
869 gboolean result = FALSE(0);
870 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
871 _tmp1_ = bala_ccode_base_module_get_current_method (self);
872 _tmp2_ = _tmp1_;
873 if (_tmp2_ != NULL((void*)0)) {
874 BalaMethod* _tmp3_;
875 BalaMethod* _tmp4_;
876 gboolean _tmp5_;
877 gboolean _tmp6_;
878 _tmp3_ = bala_ccode_base_module_get_current_method (self);
879 _tmp4_ = _tmp3_;
880 _tmp5_ = bala_method_get_coroutine (_tmp4_);
881 _tmp6_ = _tmp5_;
882 _tmp0_ = _tmp6_;
883 } else {
884 _tmp0_ = FALSE(0);
885 }
886 result = _tmp0_;
887 return result;
888}
889
890gboolean
891bala_ccode_base_module_is_in_constructor (BalaCCodeBaseModule* self)
892{
893 BalaMethod* _tmp0_;
894 BalaMethod* _tmp1_;
895 BalaSymbol* sym = NULL((void*)0);
896 BalaSymbol* _tmp2_;
897 BalaSymbol* _tmp3_;
898 BalaSymbol* _tmp4_;
899 gboolean result = FALSE(0);
900 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
901 _tmp0_ = bala_ccode_base_module_get_current_method (self);
902 _tmp1_ = _tmp0_;
903 if (_tmp1_ != NULL((void*)0)) {
904 result = FALSE(0);
905 return result;
906 }
907 _tmp2_ = bala_ccode_base_module_get_current_symbol (self);
908 _tmp3_ = _tmp2_;
909 _tmp4_ = _bala_code_node_ref0 (_tmp3_);
910 sym = _tmp4_;
911 while (TRUE(!(0))) {
912 BalaSymbol* _tmp5_;
913 BalaSymbol* _tmp6_;
914 BalaSymbol* _tmp7_;
915 BalaSymbol* _tmp8_;
916 BalaSymbol* _tmp9_;
917 BalaSymbol* _tmp10_;
918 _tmp5_ = sym;
919 if (!(_tmp5_ != NULL((void*)0))) {
920 break;
921 }
922 _tmp6_ = sym;
923 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, BALA_TYPE_CONSTRUCTOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp6_); GType __t = ((bala_constructor_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
924 result = TRUE(!(0));
925 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
926 return result;
927 }
928 _tmp7_ = sym;
929 _tmp8_ = bala_symbol_get_parent_symbol (_tmp7_);
930 _tmp9_ = _tmp8_;
931 _tmp10_ = _bala_code_node_ref0 (_tmp9_);
932 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
933 sym = _tmp10_;
934 }
935 result = FALSE(0);
936 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
937 return result;
938}
939
940gboolean
941bala_ccode_base_module_is_in_destructor (BalaCCodeBaseModule* self)
942{
943 BalaMethod* _tmp0_;
944 BalaMethod* _tmp1_;
945 BalaSymbol* sym = NULL((void*)0);
946 BalaSymbol* _tmp2_;
947 BalaSymbol* _tmp3_;
948 BalaSymbol* _tmp4_;
949 gboolean result = FALSE(0);
950 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
951 _tmp0_ = bala_ccode_base_module_get_current_method (self);
952 _tmp1_ = _tmp0_;
953 if (_tmp1_ != NULL((void*)0)) {
954 result = FALSE(0);
955 return result;
956 }
957 _tmp2_ = bala_ccode_base_module_get_current_symbol (self);
958 _tmp3_ = _tmp2_;
959 _tmp4_ = _bala_code_node_ref0 (_tmp3_);
960 sym = _tmp4_;
961 while (TRUE(!(0))) {
962 BalaSymbol* _tmp5_;
963 BalaSymbol* _tmp6_;
964 BalaSymbol* _tmp7_;
965 BalaSymbol* _tmp8_;
966 BalaSymbol* _tmp9_;
967 BalaSymbol* _tmp10_;
968 _tmp5_ = sym;
969 if (!(_tmp5_ != NULL((void*)0))) {
970 break;
971 }
972 _tmp6_ = sym;
973 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, BALA_TYPE_DESTRUCTOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp6_); GType __t = ((bala_destructor_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
974 result = TRUE(!(0));
975 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
976 return result;
977 }
978 _tmp7_ = sym;
979 _tmp8_ = bala_symbol_get_parent_symbol (_tmp7_);
980 _tmp9_ = _tmp8_;
981 _tmp10_ = _bala_code_node_ref0 (_tmp9_);
982 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
983 sym = _tmp10_;
984 }
985 result = FALSE(0);
986 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
987 return result;
988}
989
990BalaBlock*
991bala_ccode_base_module_get_current_closure_block (BalaCCodeBaseModule* self)
992{
993 BalaBlock* result;
994 BalaSymbol* _tmp0_;
995 BalaSymbol* _tmp1_;
996 BalaBlock* _tmp2_;
997 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
998 _tmp0_ = bala_ccode_base_module_get_current_symbol (self);
999 _tmp1_ = _tmp0_;
1000 _tmp2_ = bala_ccode_base_module_next_closure_block (self, _tmp1_);
1001 result = _tmp2_;
1002 return result;
1003}
1004
1005BalaBlock*
1006bala_ccode_base_module_next_closure_block (BalaCCodeBaseModule* self,
1007 BalaSymbol* sym)
1008{
1009 BalaBlock* result = NULL((void*)0);
1010 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
1011 g_return_val_if_fail (sym != NULL, NULL)do { if ((sym != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "sym != NULL")
; return (((void*)0)); } } while (0)
;
1012 while (TRUE(!(0))) {
1013 BalaMethod* method = NULL((void*)0);
1014 gboolean _tmp0_ = FALSE(0);
1015 BalaMethod* _tmp1_;
1016 BalaBlock* block = NULL((void*)0);
1017 gboolean _tmp5_ = FALSE(0);
1018 BalaMethod* _tmp6_;
1019 gboolean _tmp8_ = FALSE(0);
1020 BalaBlock* _tmp9_;
1021 BalaSymbol* _tmp14_;
1022 BalaSymbol* _tmp15_;
1023 method = G_TYPE_CHECK_INSTANCE_TYPE (sym, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
sym); GType __t = ((bala_method_get_type ())); gboolean __r; if
(!__inst) __r = (0); else if (__inst->g_class && __inst
->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a
(__inst, __t); __r; })))
? ((BalaMethod*) sym) : NULL((void*)0);
1024 _tmp1_ = method;
1025 if (_tmp1_ != NULL((void*)0)) {
1026 BalaMethod* _tmp2_;
1027 gboolean _tmp3_;
1028 gboolean _tmp4_;
1029 _tmp2_ = method;
1030 _tmp3_ = bala_method_get_closure (_tmp2_);
1031 _tmp4_ = _tmp3_;
1032 _tmp0_ = !_tmp4_;
1033 } else {
1034 _tmp0_ = FALSE(0);
1035 }
1036 if (_tmp0_) {
1037 break;
1038 }
1039 block = G_TYPE_CHECK_INSTANCE_TYPE (sym, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
sym); GType __t = ((bala_block_get_type ())); gboolean __r; if
(!__inst) __r = (0); else if (__inst->g_class && __inst
->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a
(__inst, __t); __r; })))
? ((BalaBlock*) sym) : NULL((void*)0);
1040 _tmp6_ = method;
1041 if (_tmp6_ == NULL((void*)0)) {
1042 BalaBlock* _tmp7_;
1043 _tmp7_ = block;
1044 _tmp5_ = _tmp7_ == NULL((void*)0);
1045 } else {
1046 _tmp5_ = FALSE(0);
1047 }
1048 if (_tmp5_) {
1049 break;
1050 }
1051 _tmp9_ = block;
1052 if (_tmp9_ != NULL((void*)0)) {
1053 BalaBlock* _tmp10_;
1054 gboolean _tmp11_;
1055 gboolean _tmp12_;
1056 _tmp10_ = block;
1057 _tmp11_ = bala_block_get_captured (_tmp10_);
1058 _tmp12_ = _tmp11_;
1059 _tmp8_ = _tmp12_;
1060 } else {
1061 _tmp8_ = FALSE(0);
1062 }
1063 if (_tmp8_) {
1064 BalaBlock* _tmp13_;
1065 _tmp13_ = block;
1066 result = _tmp13_;
1067 return result;
1068 }
1069 _tmp14_ = bala_symbol_get_parent_symbol (sym);
1070 _tmp15_ = _tmp14_;
1071 sym = _tmp15_;
1072 }
1073 result = NULL((void*)0);
1074 return result;
1075}
1076
1077BalaCCodeFunction*
1078bala_ccode_base_module_get_ccode (BalaCCodeBaseModule* self)
1079{
1080 BalaCCodeFunction* result;
1081 BalaCCodeBaseModuleEmitContext* _tmp0_;
1082 BalaCCodeFunction* _tmp1_;
1083 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
47
Taking true branch
48
Loop condition is false. Exiting loop
70
Taking true branch
71
Loop condition is false. Exiting loop
95
Taking true branch
96
Loop condition is false. Exiting loop
1084 _tmp0_ = self->emit_context;
97
Null pointer value stored to '_tmp0_'
1085 _tmp1_ = _tmp0_->ccode;
98
Access to field 'ccode' results in a dereference of a null pointer (loaded from variable '_tmp0_')
1086 result = _tmp1_;
1087 return result;
49
Returning without writing to 'self->emit_context'
72
Returning without writing to 'self->emit_context'
1088}
1089
1090BalaArrayList*
1091bala_ccode_base_module_get_temp_ref_values (BalaCCodeBaseModule* self)
1092{
1093 BalaArrayList* result;
1094 BalaCCodeBaseModuleEmitContext* _tmp0_;
1095 BalaArrayList* _tmp1_;
1096 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
1097 _tmp0_ = self->emit_context;
1098 _tmp1_ = _tmp0_->temp_ref_values;
1099 result = _tmp1_;
1100 return result;
1101}
1102
1103gint
1104bala_ccode_base_module_get_next_temp_var_id (BalaCCodeBaseModule* self)
1105{
1106 gint result;
1107 BalaCCodeBaseModuleEmitContext* _tmp0_;
1108 g_return_val_if_fail (self != NULL, 0)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (0); } } while (0)
;
1109 _tmp0_ = self->emit_context;
1110 result = _tmp0_->next_temp_var_id;
1111 return result;
1112}
1113
1114void
1115bala_ccode_base_module_set_next_temp_var_id (BalaCCodeBaseModule* self,
1116 gint value)
1117{
1118 BalaCCodeBaseModuleEmitContext* _tmp0_;
1119 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
1120 _tmp0_ = self->emit_context;
1121 _tmp0_->next_temp_var_id = value;
1122}
1123
1124gboolean
1125bala_ccode_base_module_get_in_creation_method (BalaCCodeBaseModule* self)
1126{
1127 gboolean result;
1128 BalaMethod* _tmp0_;
1129 BalaMethod* _tmp1_;
1130 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
1131 _tmp0_ = bala_ccode_base_module_get_current_method (self);
1132 _tmp1_ = _tmp0_;
1133 result = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_CREATION_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_creation_method_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
1134 return result;
1135}
1136
1137gboolean
1138bala_ccode_base_module_get_current_method_inner_error (BalaCCodeBaseModule* self)
1139{
1140 gboolean result;
1141 BalaCCodeBaseModuleEmitContext* _tmp0_;
1142 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
1143 _tmp0_ = self->emit_context;
1144 result = _tmp0_->current_method_inner_error;
1145 return result;
1146}
1147
1148void
1149bala_ccode_base_module_set_current_method_inner_error (BalaCCodeBaseModule* self,
1150 gboolean value)
1151{
1152 BalaCCodeBaseModuleEmitContext* _tmp0_;
1153 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
1154 _tmp0_ = self->emit_context;
1155 _tmp0_->current_method_inner_error = value;
1156}
1157
1158gboolean
1159bala_ccode_base_module_get_current_method_return (BalaCCodeBaseModule* self)
1160{
1161 gboolean result;
1162 BalaCCodeBaseModuleEmitContext* _tmp0_;
1163 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
1164 _tmp0_ = self->emit_context;
1165 result = _tmp0_->current_method_return;
1166 return result;
1167}
1168
1169void
1170bala_ccode_base_module_set_current_method_return (BalaCCodeBaseModule* self,
1171 gboolean value)
1172{
1173 BalaCCodeBaseModuleEmitContext* _tmp0_;
1174 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
1175 _tmp0_ = self->emit_context;
1176 _tmp0_->current_method_return = value;
1177}
1178
1179BalaMap*
1180bala_ccode_base_module_get_variable_name_map (BalaCCodeBaseModule* self)
1181{
1182 BalaMap* result;
1183 BalaCCodeBaseModuleEmitContext* _tmp0_;
1184 BalaMap* _tmp1_;
1185 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
1186 _tmp0_ = self->emit_context;
1187 _tmp1_ = _tmp0_->variable_name_map;
1188 result = _tmp1_;
1189 return result;
1190}
1191
1192BalaCCodeBaseModule*
1193bala_ccode_base_module_construct (GType object_type)
1194{
1195 BalaCCodeBaseModule* self = NULL((void*)0);
1196 GHashFunc _tmp0_;
1197 GEqualFunc _tmp1_;
1198 BalaHashSet* _tmp2_;
1199 BalaSet* _tmp3_;
1200 BalaSet* _tmp4_;
1201 BalaSet* _tmp5_;
1202 BalaSet* _tmp6_;
1203 BalaSet* _tmp7_;
1204 BalaSet* _tmp8_;
1205 BalaSet* _tmp9_;
1206 BalaSet* _tmp10_;
1207 BalaSet* _tmp11_;
1208 BalaSet* _tmp12_;
1209 BalaSet* _tmp13_;
1210 BalaSet* _tmp14_;
1211 BalaSet* _tmp15_;
1212 BalaSet* _tmp16_;
1213 BalaSet* _tmp17_;
1214 BalaSet* _tmp18_;
1215 BalaSet* _tmp19_;
1216 BalaSet* _tmp20_;
1217 BalaSet* _tmp21_;
1218 BalaSet* _tmp22_;
1219 BalaSet* _tmp23_;
1220 GHashFunc _tmp24_;
1221 GEqualFunc _tmp25_;
1222 BalaHashSet* _tmp26_;
1223 BalaSet* _tmp27_;
1224 BalaSet* _tmp28_;
1225 BalaSet* _tmp29_;
1226 BalaSet* _tmp30_;
1227 BalaSet* _tmp31_;
1228 BalaSet* _tmp32_;
1229 BalaSet* _tmp33_;
1230 BalaSet* _tmp34_;
1231 BalaSet* _tmp35_;
1232 BalaSet* _tmp36_;
1233 BalaSet* _tmp37_;
1234 BalaSet* _tmp38_;
1235 BalaSet* _tmp39_;
1236 BalaSet* _tmp40_;
1237 BalaSet* _tmp41_;
1238 BalaSet* _tmp42_;
1239 BalaSet* _tmp43_;
1240 BalaSet* _tmp44_;
1241 BalaSet* _tmp45_;
1242 BalaSet* _tmp46_;
1243 BalaSet* _tmp47_;
1244 BalaSet* _tmp48_;
1245 BalaSet* _tmp49_;
1246 BalaSet* _tmp50_;
1247 BalaSet* _tmp51_;
1248 BalaSet* _tmp52_;
1249 BalaSet* _tmp53_;
1250 BalaSet* _tmp54_;
1251 BalaSet* _tmp55_;
1252 BalaSet* _tmp56_;
1253 BalaSet* _tmp57_;
1254 BalaSet* _tmp58_;
1255 BalaSet* _tmp59_;
1256 BalaSet* _tmp60_;
1257 BalaSet* _tmp61_;
1258 BalaSet* _tmp62_;
1259 BalaSet* _tmp63_;
1260 BalaSet* _tmp64_;
1261 BalaSet* _tmp65_;
1262 BalaSet* _tmp66_;
1263 BalaSet* _tmp67_;
1264 BalaSet* _tmp68_;
1265 BalaSet* _tmp69_;
1266 BalaSet* _tmp70_;
1267 BalaSet* _tmp71_;
1268 BalaSet* _tmp72_;
1269 BalaSet* _tmp73_;
1270 BalaSet* _tmp74_;
1271 BalaSet* _tmp75_;
1272 self = (BalaCCodeBaseModule*) bala_code_generator_construct (object_type);
1273 _tmp0_ = g_str_hash;
1274 _tmp1_ = g_str_equal;
1275 _tmp2_ = bala_hash_set_new (G_TYPE_STRING((GType) ((16) << (2))), (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp0_, _tmp1_);
1276 _bala_iterable_unref0 (self->predefined_marshal_set)((self->predefined_marshal_set == ((void*)0)) ? ((void*)0)
: (self->predefined_marshal_set = (bala_iterable_unref (self
->predefined_marshal_set), ((void*)0))))
;
1277 self->predefined_marshal_set = (BalaSet*) _tmp2_;
1278 _tmp3_ = self->predefined_marshal_set;
1279 bala_collection_add ((BalaCollection*) _tmp3_, "VOID:VOID");
1280 _tmp4_ = self->predefined_marshal_set;
1281 bala_collection_add ((BalaCollection*) _tmp4_, "VOID:BOOLEAN");
1282 _tmp5_ = self->predefined_marshal_set;
1283 bala_collection_add ((BalaCollection*) _tmp5_, "VOID:CHAR");
1284 _tmp6_ = self->predefined_marshal_set;
1285 bala_collection_add ((BalaCollection*) _tmp6_, "VOID:UCHAR");
1286 _tmp7_ = self->predefined_marshal_set;
1287 bala_collection_add ((BalaCollection*) _tmp7_, "VOID:INT");
1288 _tmp8_ = self->predefined_marshal_set;
1289 bala_collection_add ((BalaCollection*) _tmp8_, "VOID:UINT");
1290 _tmp9_ = self->predefined_marshal_set;
1291 bala_collection_add ((BalaCollection*) _tmp9_, "VOID:LONG");
1292 _tmp10_ = self->predefined_marshal_set;
1293 bala_collection_add ((BalaCollection*) _tmp10_, "VOID:ULONG");
1294 _tmp11_ = self->predefined_marshal_set;
1295 bala_collection_add ((BalaCollection*) _tmp11_, "VOID:ENUM");
1296 _tmp12_ = self->predefined_marshal_set;
1297 bala_collection_add ((BalaCollection*) _tmp12_, "VOID:FLAGS");
1298 _tmp13_ = self->predefined_marshal_set;
1299 bala_collection_add ((BalaCollection*) _tmp13_, "VOID:FLOAT");
1300 _tmp14_ = self->predefined_marshal_set;
1301 bala_collection_add ((BalaCollection*) _tmp14_, "VOID:DOUBLE");
1302 _tmp15_ = self->predefined_marshal_set;
1303 bala_collection_add ((BalaCollection*) _tmp15_, "VOID:STRING");
1304 _tmp16_ = self->predefined_marshal_set;
1305 bala_collection_add ((BalaCollection*) _tmp16_, "VOID:POINTER");
1306 _tmp17_ = self->predefined_marshal_set;
1307 bala_collection_add ((BalaCollection*) _tmp17_, "VOID:OBJECT");
1308 _tmp18_ = self->predefined_marshal_set;
1309 bala_collection_add ((BalaCollection*) _tmp18_, "STRING:OBJECT,POINTER");
1310 _tmp19_ = self->predefined_marshal_set;
1311 bala_collection_add ((BalaCollection*) _tmp19_, "VOID:UINT,POINTER");
1312 _tmp20_ = self->predefined_marshal_set;
1313 bala_collection_add ((BalaCollection*) _tmp20_, "BOOLEAN:FLAGS");
1314 _tmp21_ = self->predefined_marshal_set;
1315 bala_collection_add ((BalaCollection*) _tmp21_, "VOID:BOXED");
1316 _tmp22_ = self->predefined_marshal_set;
1317 bala_collection_add ((BalaCollection*) _tmp22_, "VOID:VARIANT");
1318 _tmp23_ = self->predefined_marshal_set;
1319 bala_collection_add ((BalaCollection*) _tmp23_, "BOOLEAN:BOXED,BOXED");
1320 _tmp24_ = g_str_hash;
1321 _tmp25_ = g_str_equal;
1322 _tmp26_ = bala_hash_set_new (G_TYPE_STRING((GType) ((16) << (2))), (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp24_, _tmp25_);
1323 _bala_iterable_unref0 (bala_ccode_base_module_reserved_identifiers)((bala_ccode_base_module_reserved_identifiers == ((void*)0)) ?
((void*)0) : (bala_ccode_base_module_reserved_identifiers = (
bala_iterable_unref (bala_ccode_base_module_reserved_identifiers
), ((void*)0))))
;
1324 bala_ccode_base_module_reserved_identifiers = (BalaSet*) _tmp26_;
1325 _tmp27_ = bala_ccode_base_module_reserved_identifiers;
1326 bala_collection_add ((BalaCollection*) _tmp27_, "_Bool");
1327 _tmp28_ = bala_ccode_base_module_reserved_identifiers;
1328 bala_collection_add ((BalaCollection*) _tmp28_, "_Complex");
1329 _tmp29_ = bala_ccode_base_module_reserved_identifiers;
1330 bala_collection_add ((BalaCollection*) _tmp29_, "_Imaginary");
1331 _tmp30_ = bala_ccode_base_module_reserved_identifiers;
1332 bala_collection_add ((BalaCollection*) _tmp30_, "asm");
1333 _tmp31_ = bala_ccode_base_module_reserved_identifiers;
1334 bala_collection_add ((BalaCollection*) _tmp31_, "auto");
1335 _tmp32_ = bala_ccode_base_module_reserved_identifiers;
1336 bala_collection_add ((BalaCollection*) _tmp32_, "break");
1337 _tmp33_ = bala_ccode_base_module_reserved_identifiers;
1338 bala_collection_add ((BalaCollection*) _tmp33_, "case");
1339 _tmp34_ = bala_ccode_base_module_reserved_identifiers;
1340 bala_collection_add ((BalaCollection*) _tmp34_, "char");
1341 _tmp35_ = bala_ccode_base_module_reserved_identifiers;
1342 bala_collection_add ((BalaCollection*) _tmp35_, "const");
1343 _tmp36_ = bala_ccode_base_module_reserved_identifiers;
1344 bala_collection_add ((BalaCollection*) _tmp36_, "continue");
1345 _tmp37_ = bala_ccode_base_module_reserved_identifiers;
1346 bala_collection_add ((BalaCollection*) _tmp37_, "default");
1347 _tmp38_ = bala_ccode_base_module_reserved_identifiers;
1348 bala_collection_add ((BalaCollection*) _tmp38_, "do");
1349 _tmp39_ = bala_ccode_base_module_reserved_identifiers;
1350 bala_collection_add ((BalaCollection*) _tmp39_, "double");
1351 _tmp40_ = bala_ccode_base_module_reserved_identifiers;
1352 bala_collection_add ((BalaCollection*) _tmp40_, "else");
1353 _tmp41_ = bala_ccode_base_module_reserved_identifiers;
1354 bala_collection_add ((BalaCollection*) _tmp41_, "enum");
1355 _tmp42_ = bala_ccode_base_module_reserved_identifiers;
1356 bala_collection_add ((BalaCollection*) _tmp42_, "extern");
1357 _tmp43_ = bala_ccode_base_module_reserved_identifiers;
1358 bala_collection_add ((BalaCollection*) _tmp43_, "float");
1359 _tmp44_ = bala_ccode_base_module_reserved_identifiers;
1360 bala_collection_add ((BalaCollection*) _tmp44_, "for");
1361 _tmp45_ = bala_ccode_base_module_reserved_identifiers;
1362 bala_collection_add ((BalaCollection*) _tmp45_, "goto");
1363 _tmp46_ = bala_ccode_base_module_reserved_identifiers;
1364 bala_collection_add ((BalaCollection*) _tmp46_, "if");
1365 _tmp47_ = bala_ccode_base_module_reserved_identifiers;
1366 bala_collection_add ((BalaCollection*) _tmp47_, "inline");
1367 _tmp48_ = bala_ccode_base_module_reserved_identifiers;
1368 bala_collection_add ((BalaCollection*) _tmp48_, "int");
1369 _tmp49_ = bala_ccode_base_module_reserved_identifiers;
1370 bala_collection_add ((BalaCollection*) _tmp49_, "long");
1371 _tmp50_ = bala_ccode_base_module_reserved_identifiers;
1372 bala_collection_add ((BalaCollection*) _tmp50_, "register");
1373 _tmp51_ = bala_ccode_base_module_reserved_identifiers;
1374 bala_collection_add ((BalaCollection*) _tmp51_, "restrict");
1375 _tmp52_ = bala_ccode_base_module_reserved_identifiers;
1376 bala_collection_add ((BalaCollection*) _tmp52_, "return");
1377 _tmp53_ = bala_ccode_base_module_reserved_identifiers;
1378 bala_collection_add ((BalaCollection*) _tmp53_, "short");
1379 _tmp54_ = bala_ccode_base_module_reserved_identifiers;
1380 bala_collection_add ((BalaCollection*) _tmp54_, "signed");
1381 _tmp55_ = bala_ccode_base_module_reserved_identifiers;
1382 bala_collection_add ((BalaCollection*) _tmp55_, "sizeof");
1383 _tmp56_ = bala_ccode_base_module_reserved_identifiers;
1384 bala_collection_add ((BalaCollection*) _tmp56_, "static");
1385 _tmp57_ = bala_ccode_base_module_reserved_identifiers;
1386 bala_collection_add ((BalaCollection*) _tmp57_, "struct");
1387 _tmp58_ = bala_ccode_base_module_reserved_identifiers;
1388 bala_collection_add ((BalaCollection*) _tmp58_, "switch");
1389 _tmp59_ = bala_ccode_base_module_reserved_identifiers;
1390 bala_collection_add ((BalaCollection*) _tmp59_, "typedef");
1391 _tmp60_ = bala_ccode_base_module_reserved_identifiers;
1392 bala_collection_add ((BalaCollection*) _tmp60_, "union");
1393 _tmp61_ = bala_ccode_base_module_reserved_identifiers;
1394 bala_collection_add ((BalaCollection*) _tmp61_, "unsigned");
1395 _tmp62_ = bala_ccode_base_module_reserved_identifiers;
1396 bala_collection_add ((BalaCollection*) _tmp62_, "void");
1397 _tmp63_ = bala_ccode_base_module_reserved_identifiers;
1398 bala_collection_add ((BalaCollection*) _tmp63_, "volatile");
1399 _tmp64_ = bala_ccode_base_module_reserved_identifiers;
1400 bala_collection_add ((BalaCollection*) _tmp64_, "while");
1401 _tmp65_ = bala_ccode_base_module_reserved_identifiers;
1402 bala_collection_add ((BalaCollection*) _tmp65_, "_Alignas");
1403 _tmp66_ = bala_ccode_base_module_reserved_identifiers;
1404 bala_collection_add ((BalaCollection*) _tmp66_, "_Alignof");
1405 _tmp67_ = bala_ccode_base_module_reserved_identifiers;
1406 bala_collection_add ((BalaCollection*) _tmp67_, "_Atomic");
1407 _tmp68_ = bala_ccode_base_module_reserved_identifiers;
1408 bala_collection_add ((BalaCollection*) _tmp68_, "_Generic");
1409 _tmp69_ = bala_ccode_base_module_reserved_identifiers;
1410 bala_collection_add ((BalaCollection*) _tmp69_, "_Noreturn");
1411 _tmp70_ = bala_ccode_base_module_reserved_identifiers;
1412 bala_collection_add ((BalaCollection*) _tmp70_, "_Static_assert");
1413 _tmp71_ = bala_ccode_base_module_reserved_identifiers;
1414 bala_collection_add ((BalaCollection*) _tmp71_, "_Thread_local");
1415 _tmp72_ = bala_ccode_base_module_reserved_identifiers;
1416 bala_collection_add ((BalaCollection*) _tmp72_, "cdecl");
1417 _tmp73_ = bala_ccode_base_module_reserved_identifiers;
1418 bala_collection_add ((BalaCollection*) _tmp73_, "error");
1419 _tmp74_ = bala_ccode_base_module_reserved_identifiers;
1420 bala_collection_add ((BalaCollection*) _tmp74_, "result");
1421 _tmp75_ = bala_ccode_base_module_reserved_identifiers;
1422 bala_collection_add ((BalaCollection*) _tmp75_, "self");
1423 return self;
1424}
1425
1426static gpointer
1427_bala_iterable_ref0 (gpointer self)
1428{
1429 return self ? bala_iterable_ref (self) : NULL((void*)0);
1430}
1431
1432static void
1433bala_ccode_base_module_real_emit (BalaCodeGenerator* base,
1434 BalaCodeContext* context)
1435{
1436 BalaCCodeBaseModule * self;
1437 BalaNamespace* _tmp0_;
1438 BalaNamespace* _tmp1_;
1439 BalaSymbol* _tmp2_;
1440 BalaSymbol* _tmp3_;
1441 BalaScope* _tmp4_;
1442 BalaScope* _tmp5_;
1443 BalaSymbol* _tmp6_;
1444 BalaStruct* _tmp7_;
1445 BalaBooleanType* _tmp8_;
1446 BalaSymbol* _tmp9_;
1447 BalaScope* _tmp10_;
1448 BalaScope* _tmp11_;
1449 BalaSymbol* _tmp12_;
1450 BalaStruct* _tmp13_;
1451 BalaIntegerType* _tmp14_;
1452 BalaSymbol* _tmp15_;
1453 BalaScope* _tmp16_;
1454 BalaScope* _tmp17_;
1455 BalaSymbol* _tmp18_;
1456 BalaStruct* _tmp19_;
1457 BalaIntegerType* _tmp20_;
1458 BalaSymbol* _tmp21_;
1459 BalaScope* _tmp22_;
1460 BalaScope* _tmp23_;
1461 BalaSymbol* _tmp24_;
1462 BalaStruct* _tmp25_;
1463 BalaIntegerType* _tmp26_;
1464 BalaSymbol* _tmp27_;
1465 BalaScope* _tmp28_;
1466 BalaScope* _tmp29_;
1467 BalaSymbol* _tmp30_;
1468 BalaStruct* _tmp31_;
1469 BalaIntegerType* _tmp32_;
1470 BalaSymbol* _tmp33_;
1471 BalaScope* _tmp34_;
1472 BalaScope* _tmp35_;
1473 BalaSymbol* _tmp36_;
1474 BalaStruct* _tmp37_;
1475 BalaIntegerType* _tmp38_;
1476 BalaSymbol* _tmp39_;
1477 BalaScope* _tmp40_;
1478 BalaScope* _tmp41_;
1479 BalaSymbol* _tmp42_;
1480 BalaStruct* _tmp43_;
1481 BalaIntegerType* _tmp44_;
1482 BalaSymbol* _tmp45_;
1483 BalaScope* _tmp46_;
1484 BalaScope* _tmp47_;
1485 BalaSymbol* _tmp48_;
1486 BalaStruct* _tmp49_;
1487 BalaIntegerType* _tmp50_;
1488 BalaSymbol* _tmp51_;
1489 BalaScope* _tmp52_;
1490 BalaScope* _tmp53_;
1491 BalaSymbol* _tmp54_;
1492 BalaStruct* _tmp55_;
1493 BalaIntegerType* _tmp56_;
1494 BalaSymbol* _tmp57_;
1495 BalaScope* _tmp58_;
1496 BalaScope* _tmp59_;
1497 BalaSymbol* _tmp60_;
1498 BalaStruct* _tmp61_;
1499 BalaIntegerType* _tmp62_;
1500 BalaSymbol* _tmp63_;
1501 BalaScope* _tmp64_;
1502 BalaScope* _tmp65_;
1503 BalaSymbol* _tmp66_;
1504 BalaStruct* _tmp67_;
1505 BalaIntegerType* _tmp68_;
1506 BalaSymbol* _tmp69_;
1507 BalaScope* _tmp70_;
1508 BalaScope* _tmp71_;
1509 BalaSymbol* _tmp72_;
1510 BalaStruct* _tmp73_;
1511 BalaIntegerType* _tmp74_;
1512 BalaSymbol* _tmp75_;
1513 BalaScope* _tmp76_;
1514 BalaScope* _tmp77_;
1515 BalaSymbol* _tmp78_;
1516 BalaStruct* _tmp79_;
1517 BalaIntegerType* _tmp80_;
1518 BalaSymbol* _tmp81_;
1519 BalaScope* _tmp82_;
1520 BalaScope* _tmp83_;
1521 BalaSymbol* _tmp84_;
1522 BalaStruct* _tmp85_;
1523 BalaIntegerType* _tmp86_;
1524 BalaSymbol* _tmp87_;
1525 BalaScope* _tmp88_;
1526 BalaScope* _tmp89_;
1527 BalaSymbol* _tmp90_;
1528 BalaStruct* _tmp91_;
1529 BalaIntegerType* _tmp92_;
1530 BalaSymbol* _tmp93_;
1531 BalaScope* _tmp94_;
1532 BalaScope* _tmp95_;
1533 BalaSymbol* _tmp96_;
1534 BalaStruct* _tmp97_;
1535 BalaIntegerType* _tmp98_;
1536 BalaSymbol* _tmp99_;
1537 BalaScope* _tmp100_;
1538 BalaScope* _tmp101_;
1539 BalaSymbol* _tmp102_;
1540 BalaStruct* _tmp103_;
1541 BalaIntegerType* _tmp104_;
1542 BalaSymbol* _tmp105_;
1543 BalaScope* _tmp106_;
1544 BalaScope* _tmp107_;
1545 BalaSymbol* _tmp108_;
1546 BalaStruct* _tmp109_;
1547 BalaIntegerType* _tmp110_;
1548 BalaSymbol* _tmp111_;
1549 BalaScope* _tmp112_;
1550 BalaScope* _tmp113_;
1551 BalaSymbol* _tmp114_;
1552 BalaStruct* _tmp115_;
1553 BalaFloatingType* _tmp116_;
1554 BalaSymbol* _tmp117_;
1555 BalaScope* _tmp118_;
1556 BalaScope* _tmp119_;
1557 BalaSymbol* _tmp120_;
1558 BalaStruct* _tmp121_;
1559 BalaFloatingType* _tmp122_;
1560 BalaSymbol* _tmp123_;
1561 BalaScope* _tmp124_;
1562 BalaScope* _tmp125_;
1563 BalaSymbol* _tmp126_;
1564 BalaClass* _tmp127_;
1565 BalaObjectType* _tmp128_;
1566 BalaStruct* unichar_struct = NULL((void*)0);
1567 BalaSymbol* _tmp129_;
1568 BalaScope* _tmp130_;
1569 BalaScope* _tmp131_;
1570 BalaSymbol* _tmp132_;
1571 BalaStruct* _tmp133_;
1572 BalaProfile _tmp136_;
1573 BalaProfile _tmp137_;
1574 BalaSymbol* gtk_ns = NULL((void*)0);
1575 BalaSymbol* _tmp312_;
1576 BalaScope* _tmp313_;
1577 BalaScope* _tmp314_;
1578 BalaSymbol* _tmp315_;
1579 BalaSymbol* _tmp316_;
1580 BalaCCodeFile* _tmp321_;
1581 BalaCCodeFile* _tmp322_;
1582 BalaCCodeFile* _tmp323_;
1583 BalaCCodeFile* _tmp324_;
1584 BalaList* source_files = NULL((void*)0);
1585 BalaList* _tmp325_;
1586 BalaList* _tmp326_;
1587 const gchar* _tmp347_;
1588 const gchar* _tmp348_;
1589 const gchar* _tmp369_;
1590 const gchar* _tmp370_;
1591 const gchar* _tmp388_;
1592 const gchar* _tmp389_;
1593 self = (BalaCCodeBaseModule*) base;
1594 g_return_if_fail (context != NULL)do { if ((context != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "context != NULL"
); return; } } while (0)
;
1595 bala_ccode_base_module_set_context (self, context);
1596 _tmp0_ = bala_code_context_get_root (context);
1597 _tmp1_ = _tmp0_;
1598 _tmp2_ = _bala_code_node_ref0 ((BalaSymbol*) _tmp1_);
1599 _bala_code_node_unref0 (self->root_symbol)((self->root_symbol == ((void*)0)) ? ((void*)0) : (self->
root_symbol = (bala_code_node_unref (self->root_symbol), (
(void*)0))))
;
1600 self->root_symbol = _tmp2_;
1601 _tmp3_ = self->root_symbol;
1602 _tmp4_ = bala_symbol_get_scope (_tmp3_);
1603 _tmp5_ = _tmp4_;
1604 _tmp6_ = bala_scope_lookup (_tmp5_, "bool");
1605 _tmp7_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp6_), ((bala_struct_get_type ())))))
;
1606 _tmp8_ = bala_boolean_type_new (_tmp7_);
1607 _bala_code_node_unref0 (self->bool_type)((self->bool_type == ((void*)0)) ? ((void*)0) : (self->
bool_type = (bala_code_node_unref (self->bool_type), ((void
*)0))))
;
1608 self->bool_type = (BalaDataType*) _tmp8_;
1609 _bala_code_node_unref0 (_tmp7_)((_tmp7_ == ((void*)0)) ? ((void*)0) : (_tmp7_ = (bala_code_node_unref
(_tmp7_), ((void*)0))))
;
1610 _tmp9_ = self->root_symbol;
1611 _tmp10_ = bala_symbol_get_scope (_tmp9_);
1612 _tmp11_ = _tmp10_;
1613 _tmp12_ = bala_scope_lookup (_tmp11_, "char");
1614 _tmp13_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp12_), ((bala_struct_get_type ())))))
;
1615 _tmp14_ = bala_integer_type_new (_tmp13_, NULL((void*)0), NULL((void*)0));
1616 _bala_code_node_unref0 (self->char_type)((self->char_type == ((void*)0)) ? ((void*)0) : (self->
char_type = (bala_code_node_unref (self->char_type), ((void
*)0))))
;
1617 self->char_type = (BalaDataType*) _tmp14_;
1618 _bala_code_node_unref0 (_tmp13_)((_tmp13_ == ((void*)0)) ? ((void*)0) : (_tmp13_ = (bala_code_node_unref
(_tmp13_), ((void*)0))))
;
1619 _tmp15_ = self->root_symbol;
1620 _tmp16_ = bala_symbol_get_scope (_tmp15_);
1621 _tmp17_ = _tmp16_;
1622 _tmp18_ = bala_scope_lookup (_tmp17_, "uchar");
1623 _tmp19_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp18_), ((bala_struct_get_type ())))))
;
1624 _tmp20_ = bala_integer_type_new (_tmp19_, NULL((void*)0), NULL((void*)0));
1625 _bala_code_node_unref0 (self->uchar_type)((self->uchar_type == ((void*)0)) ? ((void*)0) : (self->
uchar_type = (bala_code_node_unref (self->uchar_type), ((void
*)0))))
;
1626 self->uchar_type = (BalaDataType*) _tmp20_;
1627 _bala_code_node_unref0 (_tmp19_)((_tmp19_ == ((void*)0)) ? ((void*)0) : (_tmp19_ = (bala_code_node_unref
(_tmp19_), ((void*)0))))
;
1628 _tmp21_ = self->root_symbol;
1629 _tmp22_ = bala_symbol_get_scope (_tmp21_);
1630 _tmp23_ = _tmp22_;
1631 _tmp24_ = bala_scope_lookup (_tmp23_, "short");
1632 _tmp25_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp24_), ((bala_struct_get_type ())))))
;
1633 _tmp26_ = bala_integer_type_new (_tmp25_, NULL((void*)0), NULL((void*)0));
1634 _bala_code_node_unref0 (self->short_type)((self->short_type == ((void*)0)) ? ((void*)0) : (self->
short_type = (bala_code_node_unref (self->short_type), ((void
*)0))))
;
1635 self->short_type = (BalaDataType*) _tmp26_;
1636 _bala_code_node_unref0 (_tmp25_)((_tmp25_ == ((void*)0)) ? ((void*)0) : (_tmp25_ = (bala_code_node_unref
(_tmp25_), ((void*)0))))
;
1637 _tmp27_ = self->root_symbol;
1638 _tmp28_ = bala_symbol_get_scope (_tmp27_);
1639 _tmp29_ = _tmp28_;
1640 _tmp30_ = bala_scope_lookup (_tmp29_, "ushort");
1641 _tmp31_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp30_), ((bala_struct_get_type ())))))
;
1642 _tmp32_ = bala_integer_type_new (_tmp31_, NULL((void*)0), NULL((void*)0));
1643 _bala_code_node_unref0 (self->ushort_type)((self->ushort_type == ((void*)0)) ? ((void*)0) : (self->
ushort_type = (bala_code_node_unref (self->ushort_type), (
(void*)0))))
;
1644 self->ushort_type = (BalaDataType*) _tmp32_;
1645 _bala_code_node_unref0 (_tmp31_)((_tmp31_ == ((void*)0)) ? ((void*)0) : (_tmp31_ = (bala_code_node_unref
(_tmp31_), ((void*)0))))
;
1646 _tmp33_ = self->root_symbol;
1647 _tmp34_ = bala_symbol_get_scope (_tmp33_);
1648 _tmp35_ = _tmp34_;
1649 _tmp36_ = bala_scope_lookup (_tmp35_, "int");
1650 _tmp37_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp36_), ((bala_struct_get_type ())))))
;
1651 _tmp38_ = bala_integer_type_new (_tmp37_, NULL((void*)0), NULL((void*)0));
1652 _bala_code_node_unref0 (self->int_type)((self->int_type == ((void*)0)) ? ((void*)0) : (self->int_type
= (bala_code_node_unref (self->int_type), ((void*)0))))
;
1653 self->int_type = (BalaDataType*) _tmp38_;
1654 _bala_code_node_unref0 (_tmp37_)((_tmp37_ == ((void*)0)) ? ((void*)0) : (_tmp37_ = (bala_code_node_unref
(_tmp37_), ((void*)0))))
;
1655 _tmp39_ = self->root_symbol;
1656 _tmp40_ = bala_symbol_get_scope (_tmp39_);
1657 _tmp41_ = _tmp40_;
1658 _tmp42_ = bala_scope_lookup (_tmp41_, "uint");
1659 _tmp43_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp42_), ((bala_struct_get_type ())))))
;
1660 _tmp44_ = bala_integer_type_new (_tmp43_, NULL((void*)0), NULL((void*)0));
1661 _bala_code_node_unref0 (self->uint_type)((self->uint_type == ((void*)0)) ? ((void*)0) : (self->
uint_type = (bala_code_node_unref (self->uint_type), ((void
*)0))))
;
1662 self->uint_type = (BalaDataType*) _tmp44_;
1663 _bala_code_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_code_node_unref
(_tmp43_), ((void*)0))))
;
1664 _tmp45_ = self->root_symbol;
1665 _tmp46_ = bala_symbol_get_scope (_tmp45_);
1666 _tmp47_ = _tmp46_;
1667 _tmp48_ = bala_scope_lookup (_tmp47_, "long");
1668 _tmp49_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp48_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp48_), ((bala_struct_get_type ())))))
;
1669 _tmp50_ = bala_integer_type_new (_tmp49_, NULL((void*)0), NULL((void*)0));
1670 _bala_code_node_unref0 (self->long_type)((self->long_type == ((void*)0)) ? ((void*)0) : (self->
long_type = (bala_code_node_unref (self->long_type), ((void
*)0))))
;
1671 self->long_type = (BalaDataType*) _tmp50_;
1672 _bala_code_node_unref0 (_tmp49_)((_tmp49_ == ((void*)0)) ? ((void*)0) : (_tmp49_ = (bala_code_node_unref
(_tmp49_), ((void*)0))))
;
1673 _tmp51_ = self->root_symbol;
1674 _tmp52_ = bala_symbol_get_scope (_tmp51_);
1675 _tmp53_ = _tmp52_;
1676 _tmp54_ = bala_scope_lookup (_tmp53_, "ulong");
1677 _tmp55_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp54_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp54_), ((bala_struct_get_type ())))))
;
1678 _tmp56_ = bala_integer_type_new (_tmp55_, NULL((void*)0), NULL((void*)0));
1679 _bala_code_node_unref0 (self->ulong_type)((self->ulong_type == ((void*)0)) ? ((void*)0) : (self->
ulong_type = (bala_code_node_unref (self->ulong_type), ((void
*)0))))
;
1680 self->ulong_type = (BalaDataType*) _tmp56_;
1681 _bala_code_node_unref0 (_tmp55_)((_tmp55_ == ((void*)0)) ? ((void*)0) : (_tmp55_ = (bala_code_node_unref
(_tmp55_), ((void*)0))))
;
1682 _tmp57_ = self->root_symbol;
1683 _tmp58_ = bala_symbol_get_scope (_tmp57_);
1684 _tmp59_ = _tmp58_;
1685 _tmp60_ = bala_scope_lookup (_tmp59_, "int8");
1686 _tmp61_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp60_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp60_), ((bala_struct_get_type ())))))
;
1687 _tmp62_ = bala_integer_type_new (_tmp61_, NULL((void*)0), NULL((void*)0));
1688 _bala_code_node_unref0 (self->int8_type)((self->int8_type == ((void*)0)) ? ((void*)0) : (self->
int8_type = (bala_code_node_unref (self->int8_type), ((void
*)0))))
;
1689 self->int8_type = (BalaDataType*) _tmp62_;
1690 _bala_code_node_unref0 (_tmp61_)((_tmp61_ == ((void*)0)) ? ((void*)0) : (_tmp61_ = (bala_code_node_unref
(_tmp61_), ((void*)0))))
;
1691 _tmp63_ = self->root_symbol;
1692 _tmp64_ = bala_symbol_get_scope (_tmp63_);
1693 _tmp65_ = _tmp64_;
1694 _tmp66_ = bala_scope_lookup (_tmp65_, "uint8");
1695 _tmp67_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp66_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp66_), ((bala_struct_get_type ())))))
;
1696 _tmp68_ = bala_integer_type_new (_tmp67_, NULL((void*)0), NULL((void*)0));
1697 _bala_code_node_unref0 (self->uint8_type)((self->uint8_type == ((void*)0)) ? ((void*)0) : (self->
uint8_type = (bala_code_node_unref (self->uint8_type), ((void
*)0))))
;
1698 self->uint8_type = (BalaDataType*) _tmp68_;
1699 _bala_code_node_unref0 (_tmp67_)((_tmp67_ == ((void*)0)) ? ((void*)0) : (_tmp67_ = (bala_code_node_unref
(_tmp67_), ((void*)0))))
;
1700 _tmp69_ = self->root_symbol;
1701 _tmp70_ = bala_symbol_get_scope (_tmp69_);
1702 _tmp71_ = _tmp70_;
1703 _tmp72_ = bala_scope_lookup (_tmp71_, "int16");
1704 _tmp73_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp72_), ((bala_struct_get_type ())))))
;
1705 _tmp74_ = bala_integer_type_new (_tmp73_, NULL((void*)0), NULL((void*)0));
1706 _bala_code_node_unref0 (self->int16_type)((self->int16_type == ((void*)0)) ? ((void*)0) : (self->
int16_type = (bala_code_node_unref (self->int16_type), ((void
*)0))))
;
1707 self->int16_type = (BalaDataType*) _tmp74_;
1708 _bala_code_node_unref0 (_tmp73_)((_tmp73_ == ((void*)0)) ? ((void*)0) : (_tmp73_ = (bala_code_node_unref
(_tmp73_), ((void*)0))))
;
1709 _tmp75_ = self->root_symbol;
1710 _tmp76_ = bala_symbol_get_scope (_tmp75_);
1711 _tmp77_ = _tmp76_;
1712 _tmp78_ = bala_scope_lookup (_tmp77_, "uint16");
1713 _tmp79_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp78_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp78_), ((bala_struct_get_type ())))))
;
1714 _tmp80_ = bala_integer_type_new (_tmp79_, NULL((void*)0), NULL((void*)0));
1715 _bala_code_node_unref0 (self->uint16_type)((self->uint16_type == ((void*)0)) ? ((void*)0) : (self->
uint16_type = (bala_code_node_unref (self->uint16_type), (
(void*)0))))
;
1716 self->uint16_type = (BalaDataType*) _tmp80_;
1717 _bala_code_node_unref0 (_tmp79_)((_tmp79_ == ((void*)0)) ? ((void*)0) : (_tmp79_ = (bala_code_node_unref
(_tmp79_), ((void*)0))))
;
1718 _tmp81_ = self->root_symbol;
1719 _tmp82_ = bala_symbol_get_scope (_tmp81_);
1720 _tmp83_ = _tmp82_;
1721 _tmp84_ = bala_scope_lookup (_tmp83_, "int32");
1722 _tmp85_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp84_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp84_), ((bala_struct_get_type ())))))
;
1723 _tmp86_ = bala_integer_type_new (_tmp85_, NULL((void*)0), NULL((void*)0));
1724 _bala_code_node_unref0 (self->int32_type)((self->int32_type == ((void*)0)) ? ((void*)0) : (self->
int32_type = (bala_code_node_unref (self->int32_type), ((void
*)0))))
;
1725 self->int32_type = (BalaDataType*) _tmp86_;
1726 _bala_code_node_unref0 (_tmp85_)((_tmp85_ == ((void*)0)) ? ((void*)0) : (_tmp85_ = (bala_code_node_unref
(_tmp85_), ((void*)0))))
;
1727 _tmp87_ = self->root_symbol;
1728 _tmp88_ = bala_symbol_get_scope (_tmp87_);
1729 _tmp89_ = _tmp88_;
1730 _tmp90_ = bala_scope_lookup (_tmp89_, "uint32");
1731 _tmp91_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp90_), ((bala_struct_get_type ())))))
;
1732 _tmp92_ = bala_integer_type_new (_tmp91_, NULL((void*)0), NULL((void*)0));
1733 _bala_code_node_unref0 (self->uint32_type)((self->uint32_type == ((void*)0)) ? ((void*)0) : (self->
uint32_type = (bala_code_node_unref (self->uint32_type), (
(void*)0))))
;
1734 self->uint32_type = (BalaDataType*) _tmp92_;
1735 _bala_code_node_unref0 (_tmp91_)((_tmp91_ == ((void*)0)) ? ((void*)0) : (_tmp91_ = (bala_code_node_unref
(_tmp91_), ((void*)0))))
;
1736 _tmp93_ = self->root_symbol;
1737 _tmp94_ = bala_symbol_get_scope (_tmp93_);
1738 _tmp95_ = _tmp94_;
1739 _tmp96_ = bala_scope_lookup (_tmp95_, "int64");
1740 _tmp97_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp96_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp96_), ((bala_struct_get_type ())))))
;
1741 _tmp98_ = bala_integer_type_new (_tmp97_, NULL((void*)0), NULL((void*)0));
1742 _bala_code_node_unref0 (self->int64_type)((self->int64_type == ((void*)0)) ? ((void*)0) : (self->
int64_type = (bala_code_node_unref (self->int64_type), ((void
*)0))))
;
1743 self->int64_type = (BalaDataType*) _tmp98_;
1744 _bala_code_node_unref0 (_tmp97_)((_tmp97_ == ((void*)0)) ? ((void*)0) : (_tmp97_ = (bala_code_node_unref
(_tmp97_), ((void*)0))))
;
1745 _tmp99_ = self->root_symbol;
1746 _tmp100_ = bala_symbol_get_scope (_tmp99_);
1747 _tmp101_ = _tmp100_;
1748 _tmp102_ = bala_scope_lookup (_tmp101_, "uint64");
1749 _tmp103_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp102_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp102_), ((bala_struct_get_type ())))))
;
1750 _tmp104_ = bala_integer_type_new (_tmp103_, NULL((void*)0), NULL((void*)0));
1751 _bala_code_node_unref0 (self->uint64_type)((self->uint64_type == ((void*)0)) ? ((void*)0) : (self->
uint64_type = (bala_code_node_unref (self->uint64_type), (
(void*)0))))
;
1752 self->uint64_type = (BalaDataType*) _tmp104_;
1753 _bala_code_node_unref0 (_tmp103_)((_tmp103_ == ((void*)0)) ? ((void*)0) : (_tmp103_ = (bala_code_node_unref
(_tmp103_), ((void*)0))))
;
1754 _tmp105_ = self->root_symbol;
1755 _tmp106_ = bala_symbol_get_scope (_tmp105_);
1756 _tmp107_ = _tmp106_;
1757 _tmp108_ = bala_scope_lookup (_tmp107_, "size_t");
1758 _tmp109_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp108_), ((bala_struct_get_type ())))))
;
1759 _tmp110_ = bala_integer_type_new (_tmp109_, NULL((void*)0), NULL((void*)0));
1760 _bala_code_node_unref0 (self->size_t_type)((self->size_t_type == ((void*)0)) ? ((void*)0) : (self->
size_t_type = (bala_code_node_unref (self->size_t_type), (
(void*)0))))
;
1761 self->size_t_type = (BalaDataType*) _tmp110_;
1762 _bala_code_node_unref0 (_tmp109_)((_tmp109_ == ((void*)0)) ? ((void*)0) : (_tmp109_ = (bala_code_node_unref
(_tmp109_), ((void*)0))))
;
1763 _tmp111_ = self->root_symbol;
1764 _tmp112_ = bala_symbol_get_scope (_tmp111_);
1765 _tmp113_ = _tmp112_;
1766 _tmp114_ = bala_scope_lookup (_tmp113_, "float");
1767 _tmp115_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp114_), ((bala_struct_get_type ())))))
;
1768 _tmp116_ = bala_floating_type_new (_tmp115_);
1769 _bala_code_node_unref0 (self->float_type)((self->float_type == ((void*)0)) ? ((void*)0) : (self->
float_type = (bala_code_node_unref (self->float_type), ((void
*)0))))
;
1770 self->float_type = (BalaDataType*) _tmp116_;
1771 _bala_code_node_unref0 (_tmp115_)((_tmp115_ == ((void*)0)) ? ((void*)0) : (_tmp115_ = (bala_code_node_unref
(_tmp115_), ((void*)0))))
;
1772 _tmp117_ = self->root_symbol;
1773 _tmp118_ = bala_symbol_get_scope (_tmp117_);
1774 _tmp119_ = _tmp118_;
1775 _tmp120_ = bala_scope_lookup (_tmp119_, "double");
1776 _tmp121_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp120_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp120_), ((bala_struct_get_type ())))))
;
1777 _tmp122_ = bala_floating_type_new (_tmp121_);
1778 _bala_code_node_unref0 (self->double_type)((self->double_type == ((void*)0)) ? ((void*)0) : (self->
double_type = (bala_code_node_unref (self->double_type), (
(void*)0))))
;
1779 self->double_type = (BalaDataType*) _tmp122_;
1780 _bala_code_node_unref0 (_tmp121_)((_tmp121_ == ((void*)0)) ? ((void*)0) : (_tmp121_ = (bala_code_node_unref
(_tmp121_), ((void*)0))))
;
1781 _tmp123_ = self->root_symbol;
1782 _tmp124_ = bala_symbol_get_scope (_tmp123_);
1783 _tmp125_ = _tmp124_;
1784 _tmp126_ = bala_scope_lookup (_tmp125_, "string");
1785 _tmp127_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp126_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp126_), ((bala_class_get_type ())))))
;
1786 _tmp128_ = bala_object_type_new ((BalaObjectTypeSymbol*) _tmp127_);
1787 _bala_code_node_unref0 (self->string_type)((self->string_type == ((void*)0)) ? ((void*)0) : (self->
string_type = (bala_code_node_unref (self->string_type), (
(void*)0))))
;
1788 self->string_type = (BalaDataType*) _tmp128_;
1789 _bala_code_node_unref0 (_tmp127_)((_tmp127_ == ((void*)0)) ? ((void*)0) : (_tmp127_ = (bala_code_node_unref
(_tmp127_), ((void*)0))))
;
1790 _tmp129_ = self->root_symbol;
1791 _tmp130_ = bala_symbol_get_scope (_tmp129_);
1792 _tmp131_ = _tmp130_;
1793 _tmp132_ = bala_scope_lookup (_tmp131_, "unichar");
1794 unichar_struct = G_TYPE_CHECK_INSTANCE_CAST (_tmp132_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp132_), ((bala_struct_get_type ())))))
;
1795 _tmp133_ = unichar_struct;
1796 if (_tmp133_ != NULL((void*)0)) {
1797 BalaStruct* _tmp134_;
1798 BalaIntegerType* _tmp135_;
1799 _tmp134_ = unichar_struct;
1800 _tmp135_ = bala_integer_type_new (_tmp134_, NULL((void*)0), NULL((void*)0));
1801 _bala_code_node_unref0 (self->unichar_type)((self->unichar_type == ((void*)0)) ? ((void*)0) : (self->
unichar_type = (bala_code_node_unref (self->unichar_type),
((void*)0))))
;
1802 self->unichar_type = (BalaDataType*) _tmp135_;
1803 }
1804 _tmp136_ = bala_code_context_get_profile (context);
1805 _tmp137_ = _tmp136_;
1806 if (_tmp137_ == BALA_PROFILE_GOBJECT) {
1807 BalaSymbol* glib_ns = NULL((void*)0);
1808 BalaSymbol* _tmp138_;
1809 BalaScope* _tmp139_;
1810 BalaScope* _tmp140_;
1811 BalaSymbol* _tmp141_;
1812 BalaSymbol* _tmp142_;
1813 BalaScope* _tmp143_;
1814 BalaScope* _tmp144_;
1815 BalaSymbol* _tmp145_;
1816 BalaSymbol* _tmp146_;
1817 BalaScope* _tmp147_;
1818 BalaScope* _tmp148_;
1819 BalaSymbol* _tmp149_;
1820 BalaErrorType* _tmp150_;
1821 BalaSymbol* _tmp151_;
1822 BalaScope* _tmp152_;
1823 BalaScope* _tmp153_;
1824 BalaSymbol* _tmp154_;
1825 BalaSymbol* _tmp155_;
1826 BalaScope* _tmp156_;
1827 BalaScope* _tmp157_;
1828 BalaSymbol* _tmp158_;
1829 BalaSymbol* _tmp159_;
1830 BalaScope* _tmp160_;
1831 BalaScope* _tmp161_;
1832 BalaSymbol* _tmp162_;
1833 BalaSymbol* _tmp163_;
1834 BalaScope* _tmp164_;
1835 BalaScope* _tmp165_;
1836 BalaSymbol* _tmp166_;
1837 BalaSymbol* _tmp167_;
1838 BalaScope* _tmp168_;
1839 BalaScope* _tmp169_;
1840 BalaSymbol* _tmp170_;
1841 BalaSymbol* _tmp171_;
1842 BalaScope* _tmp172_;
1843 BalaScope* _tmp173_;
1844 BalaSymbol* _tmp174_;
1845 BalaSymbol* _tmp175_;
1846 BalaScope* _tmp176_;
1847 BalaScope* _tmp177_;
1848 BalaSymbol* _tmp178_;
1849 BalaSymbol* _tmp179_;
1850 BalaScope* _tmp180_;
1851 BalaScope* _tmp181_;
1852 BalaSymbol* _tmp182_;
1853 BalaSymbol* _tmp183_;
1854 BalaScope* _tmp184_;
1855 BalaScope* _tmp185_;
1856 BalaSymbol* _tmp186_;
1857 BalaSymbol* _tmp187_;
1858 BalaScope* _tmp188_;
1859 BalaScope* _tmp189_;
1860 BalaSymbol* _tmp190_;
1861 BalaSymbol* _tmp191_;
1862 BalaScope* _tmp192_;
1863 BalaScope* _tmp193_;
1864 BalaSymbol* _tmp194_;
1865 BalaSymbol* _tmp195_;
1866 BalaScope* _tmp196_;
1867 BalaScope* _tmp197_;
1868 BalaSymbol* _tmp198_;
1869 BalaSymbol* _tmp199_;
1870 BalaScope* _tmp200_;
1871 BalaScope* _tmp201_;
1872 BalaSymbol* _tmp202_;
1873 BalaStruct* _tmp203_;
1874 BalaIntegerType* _tmp204_;
1875 BalaSymbol* _tmp205_;
1876 BalaScope* _tmp206_;
1877 BalaScope* _tmp207_;
1878 BalaSymbol* _tmp208_;
1879 BalaSymbol* _tmp209_;
1880 BalaScope* _tmp210_;
1881 BalaScope* _tmp211_;
1882 BalaSymbol* _tmp212_;
1883 BalaSymbol* _tmp213_;
1884 BalaScope* _tmp214_;
1885 BalaScope* _tmp215_;
1886 BalaSymbol* _tmp216_;
1887 BalaSymbol* _tmp217_;
1888 BalaScope* _tmp218_;
1889 BalaScope* _tmp219_;
1890 BalaSymbol* _tmp220_;
1891 BalaSymbol* _tmp221_;
1892 BalaScope* _tmp222_;
1893 BalaScope* _tmp223_;
1894 BalaSymbol* _tmp224_;
1895 BalaSymbol* _tmp225_;
1896 BalaScope* _tmp226_;
1897 BalaScope* _tmp227_;
1898 BalaSymbol* _tmp228_;
1899 BalaSymbol* _tmp229_;
1900 BalaScope* _tmp230_;
1901 BalaScope* _tmp231_;
1902 BalaSymbol* _tmp232_;
1903 BalaStruct* _tmp233_;
1904 BalaStruct* _tmp234_;
1905 BalaSymbol* _tmp235_;
1906 BalaScope* _tmp236_;
1907 BalaScope* _tmp237_;
1908 BalaSymbol* _tmp238_;
1909 BalaSymbol* _tmp239_;
1910 BalaScope* _tmp240_;
1911 BalaScope* _tmp241_;
1912 BalaSymbol* _tmp242_;
1913 BalaSymbol* _tmp243_;
1914 BalaScope* _tmp244_;
1915 BalaScope* _tmp245_;
1916 BalaSymbol* _tmp246_;
1917 BalaClass* _tmp247_;
1918 BalaObjectType* _tmp248_;
1919 BalaMethod* _tmp249_;
1920 BalaMethod* _tmp250_;
1921 BalaSymbol* _tmp272_;
1922 BalaScope* _tmp273_;
1923 BalaScope* _tmp274_;
1924 BalaSymbol* _tmp275_;
1925 BalaSymbol* _tmp276_;
1926 BalaScope* _tmp277_;
1927 BalaScope* _tmp278_;
1928 BalaSymbol* _tmp279_;
1929 BalaStruct* _tmp280_;
1930 BalaStructValueType* _tmp281_;
1931 BalaDataType* _tmp282_;
1932 BalaDataType* _tmp283_;
1933 BalaSymbol* _tmp284_;
1934 BalaScope* _tmp285_;
1935 BalaScope* _tmp286_;
1936 BalaSymbol* _tmp287_;
1937 BalaDelegate* _tmp288_;
1938 BalaDelegateType* _tmp289_;
1939 _tmp138_ = self->root_symbol;
1940 _tmp139_ = bala_symbol_get_scope (_tmp138_);
1941 _tmp140_ = _tmp139_;
1942 _tmp141_ = bala_scope_lookup (_tmp140_, "GLib");
1943 glib_ns = _tmp141_;
1944 _tmp142_ = glib_ns;
1945 _tmp143_ = bala_symbol_get_scope (_tmp142_);
1946 _tmp144_ = _tmp143_;
1947 _tmp145_ = bala_scope_lookup (_tmp144_, "Type");
1948 _bala_code_node_unref0 (self->gtype_type)((self->gtype_type == ((void*)0)) ? ((void*)0) : (self->
gtype_type = (bala_code_node_unref (self->gtype_type), ((void
*)0))))
;
1949 self->gtype_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp145_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp145_), ((bala_typesymbol_get_type ())))))
;
1950 _tmp146_ = glib_ns;
1951 _tmp147_ = bala_symbol_get_scope (_tmp146_);
1952 _tmp148_ = _tmp147_;
1953 _tmp149_ = bala_scope_lookup (_tmp148_, "Object");
1954 _bala_code_node_unref0 (self->gobject_type)((self->gobject_type == ((void*)0)) ? ((void*)0) : (self->
gobject_type = (bala_code_node_unref (self->gobject_type),
((void*)0))))
;
1955 self->gobject_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp149_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp149_), ((bala_typesymbol_get_type ())))))
;
1956 _tmp150_ = bala_error_type_new (NULL((void*)0), NULL((void*)0), NULL((void*)0));
1957 _bala_code_node_unref0 (self->gerror_type)((self->gerror_type == ((void*)0)) ? ((void*)0) : (self->
gerror_type = (bala_code_node_unref (self->gerror_type), (
(void*)0))))
;
1958 self->gerror_type = _tmp150_;
1959 _tmp151_ = glib_ns;
1960 _tmp152_ = bala_symbol_get_scope (_tmp151_);
1961 _tmp153_ = _tmp152_;
1962 _tmp154_ = bala_scope_lookup (_tmp153_, "List");
1963 _bala_code_node_unref0 (self->glist_type)((self->glist_type == ((void*)0)) ? ((void*)0) : (self->
glist_type = (bala_code_node_unref (self->glist_type), ((void
*)0))))
;
1964 self->glist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp154_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp154_), ((bala_class_get_type ())))))
;
1965 _tmp155_ = glib_ns;
1966 _tmp156_ = bala_symbol_get_scope (_tmp155_);
1967 _tmp157_ = _tmp156_;
1968 _tmp158_ = bala_scope_lookup (_tmp157_, "SList");
1969 _bala_code_node_unref0 (self->gslist_type)((self->gslist_type == ((void*)0)) ? ((void*)0) : (self->
gslist_type = (bala_code_node_unref (self->gslist_type), (
(void*)0))))
;
1970 self->gslist_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp158_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp158_), ((bala_class_get_type ())))))
;
1971 _tmp159_ = glib_ns;
1972 _tmp160_ = bala_symbol_get_scope (_tmp159_);
1973 _tmp161_ = _tmp160_;
1974 _tmp162_ = bala_scope_lookup (_tmp161_, "Node");
1975 _bala_code_node_unref0 (self->gnode_type)((self->gnode_type == ((void*)0)) ? ((void*)0) : (self->
gnode_type = (bala_code_node_unref (self->gnode_type), ((void
*)0))))
;
1976 self->gnode_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp162_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp162_), ((bala_class_get_type ())))))
;
1977 _tmp163_ = glib_ns;
1978 _tmp164_ = bala_symbol_get_scope (_tmp163_);
1979 _tmp165_ = _tmp164_;
1980 _tmp166_ = bala_scope_lookup (_tmp165_, "Queue");
1981 _bala_code_node_unref0 (self->gqueue_type)((self->gqueue_type == ((void*)0)) ? ((void*)0) : (self->
gqueue_type = (bala_code_node_unref (self->gqueue_type), (
(void*)0))))
;
1982 self->gqueue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp166_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp166_), ((bala_class_get_type ())))))
;
1983 _tmp167_ = glib_ns;
1984 _tmp168_ = bala_symbol_get_scope (_tmp167_);
1985 _tmp169_ = _tmp168_;
1986 _tmp170_ = bala_scope_lookup (_tmp169_, "ValueArray");
1987 _bala_code_node_unref0 (self->gvaluearray_type)((self->gvaluearray_type == ((void*)0)) ? ((void*)0) : (self
->gvaluearray_type = (bala_code_node_unref (self->gvaluearray_type
), ((void*)0))))
;
1988 self->gvaluearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp170_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp170_), ((bala_class_get_type ())))))
;
1989 _tmp171_ = glib_ns;
1990 _tmp172_ = bala_symbol_get_scope (_tmp171_);
1991 _tmp173_ = _tmp172_;
1992 _tmp174_ = bala_scope_lookup (_tmp173_, "StringBuilder");
1993 _bala_code_node_unref0 (self->gstringbuilder_type)((self->gstringbuilder_type == ((void*)0)) ? ((void*)0) : (
self->gstringbuilder_type = (bala_code_node_unref (self->
gstringbuilder_type), ((void*)0))))
;
1994 self->gstringbuilder_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp174_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp174_), ((bala_typesymbol_get_type ())))))
;
1995 _tmp175_ = glib_ns;
1996 _tmp176_ = bala_symbol_get_scope (_tmp175_);
1997 _tmp177_ = _tmp176_;
1998 _tmp178_ = bala_scope_lookup (_tmp177_, "Array");
1999 _bala_code_node_unref0 (self->garray_type)((self->garray_type == ((void*)0)) ? ((void*)0) : (self->
garray_type = (bala_code_node_unref (self->garray_type), (
(void*)0))))
;
2000 self->garray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp178_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp178_), ((bala_typesymbol_get_type ())))))
;
2001 _tmp179_ = glib_ns;
2002 _tmp180_ = bala_symbol_get_scope (_tmp179_);
2003 _tmp181_ = _tmp180_;
2004 _tmp182_ = bala_scope_lookup (_tmp181_, "ByteArray");
2005 _bala_code_node_unref0 (self->gbytearray_type)((self->gbytearray_type == ((void*)0)) ? ((void*)0) : (self
->gbytearray_type = (bala_code_node_unref (self->gbytearray_type
), ((void*)0))))
;
2006 self->gbytearray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp182_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp182_), ((bala_typesymbol_get_type ())))))
;
2007 _tmp183_ = glib_ns;
2008 _tmp184_ = bala_symbol_get_scope (_tmp183_);
2009 _tmp185_ = _tmp184_;
2010 _tmp186_ = bala_scope_lookup (_tmp185_, "PtrArray");
2011 _bala_code_node_unref0 (self->gptrarray_type)((self->gptrarray_type == ((void*)0)) ? ((void*)0) : (self
->gptrarray_type = (bala_code_node_unref (self->gptrarray_type
), ((void*)0))))
;
2012 self->gptrarray_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp186_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp186_), ((bala_typesymbol_get_type ())))))
;
2013 _tmp187_ = glib_ns;
2014 _tmp188_ = bala_symbol_get_scope (_tmp187_);
2015 _tmp189_ = _tmp188_;
2016 _tmp190_ = bala_scope_lookup (_tmp189_, "ThreadPool");
2017 _bala_code_node_unref0 (self->gthreadpool_type)((self->gthreadpool_type == ((void*)0)) ? ((void*)0) : (self
->gthreadpool_type = (bala_code_node_unref (self->gthreadpool_type
), ((void*)0))))
;
2018 self->gthreadpool_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp190_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp190_), ((bala_typesymbol_get_type ())))))
;
2019 _tmp191_ = self->root_symbol;
2020 _tmp192_ = bala_symbol_get_scope (_tmp191_);
2021 _tmp193_ = _tmp192_;
2022 _tmp194_ = bala_scope_lookup (_tmp193_, "GLib");
2023 _tmp195_ = _tmp194_;
2024 _tmp196_ = bala_symbol_get_scope (_tmp195_);
2025 _tmp197_ = _tmp196_;
2026 _tmp198_ = bala_scope_lookup (_tmp197_, "Error");
2027 _bala_code_node_unref0 (self->priv->gerror)((self->priv->gerror == ((void*)0)) ? ((void*)0) : (self
->priv->gerror = (bala_code_node_unref (self->priv->
gerror), ((void*)0))))
;
2028 self->priv->gerror = G_TYPE_CHECK_INSTANCE_CAST (_tmp198_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp198_), ((bala_class_get_type ())))))
;
2029 _bala_code_node_unref0 (_tmp195_)((_tmp195_ == ((void*)0)) ? ((void*)0) : (_tmp195_ = (bala_code_node_unref
(_tmp195_), ((void*)0))))
;
2030 _tmp199_ = glib_ns;
2031 _tmp200_ = bala_symbol_get_scope (_tmp199_);
2032 _tmp201_ = _tmp200_;
2033 _tmp202_ = bala_scope_lookup (_tmp201_, "Quark");
2034 _tmp203_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp202_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp202_), ((bala_struct_get_type ())))))
;
2035 _tmp204_ = bala_integer_type_new (_tmp203_, NULL((void*)0), NULL((void*)0));
2036 _bala_code_node_unref0 (self->gquark_type)((self->gquark_type == ((void*)0)) ? ((void*)0) : (self->
gquark_type = (bala_code_node_unref (self->gquark_type), (
(void*)0))))
;
2037 self->gquark_type = (BalaDataType*) _tmp204_;
2038 _bala_code_node_unref0 (_tmp203_)((_tmp203_ == ((void*)0)) ? ((void*)0) : (_tmp203_ = (bala_code_node_unref
(_tmp203_), ((void*)0))))
;
2039 _tmp205_ = glib_ns;
2040 _tmp206_ = bala_symbol_get_scope (_tmp205_);
2041 _tmp207_ = _tmp206_;
2042 _tmp208_ = bala_scope_lookup (_tmp207_, "Value");
2043 _bala_code_node_unref0 (self->gvalue_type)((self->gvalue_type == ((void*)0)) ? ((void*)0) : (self->
gvalue_type = (bala_code_node_unref (self->gvalue_type), (
(void*)0))))
;
2044 self->gvalue_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp208_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp208_), ((bala_struct_get_type ())))))
;
2045 _tmp209_ = glib_ns;
2046 _tmp210_ = bala_symbol_get_scope (_tmp209_);
2047 _tmp211_ = _tmp210_;
2048 _tmp212_ = bala_scope_lookup (_tmp211_, "Variant");
2049 _bala_code_node_unref0 (self->gvariant_type)((self->gvariant_type == ((void*)0)) ? ((void*)0) : (self->
gvariant_type = (bala_code_node_unref (self->gvariant_type
), ((void*)0))))
;
2050 self->gvariant_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp212_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp212_), ((bala_class_get_type ())))))
;
2051 _tmp213_ = glib_ns;
2052 _tmp214_ = bala_symbol_get_scope (_tmp213_);
2053 _tmp215_ = _tmp214_;
2054 _tmp216_ = bala_scope_lookup (_tmp215_, "Source");
2055 _bala_code_node_unref0 (self->gsource_type)((self->gsource_type == ((void*)0)) ? ((void*)0) : (self->
gsource_type = (bala_code_node_unref (self->gsource_type),
((void*)0))))
;
2056 self->gsource_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp216_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp216_), ((bala_class_get_type ())))))
;
2057 _tmp217_ = glib_ns;
2058 _tmp218_ = bala_symbol_get_scope (_tmp217_);
2059 _tmp219_ = _tmp218_;
2060 _tmp220_ = bala_scope_lookup (_tmp219_, "Mutex");
2061 _bala_code_node_unref0 (self->gmutex_type)((self->gmutex_type == ((void*)0)) ? ((void*)0) : (self->
gmutex_type = (bala_code_node_unref (self->gmutex_type), (
(void*)0))))
;
2062 self->gmutex_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp220_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp220_), ((bala_struct_get_type ())))))
;
2063 _tmp221_ = glib_ns;
2064 _tmp222_ = bala_symbol_get_scope (_tmp221_);
2065 _tmp223_ = _tmp222_;
2066 _tmp224_ = bala_scope_lookup (_tmp223_, "RecMutex");
2067 _bala_code_node_unref0 (self->grecmutex_type)((self->grecmutex_type == ((void*)0)) ? ((void*)0) : (self
->grecmutex_type = (bala_code_node_unref (self->grecmutex_type
), ((void*)0))))
;
2068 self->grecmutex_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp224_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp224_), ((bala_struct_get_type ())))))
;
2069 _tmp225_ = glib_ns;
2070 _tmp226_ = bala_symbol_get_scope (_tmp225_);
2071 _tmp227_ = _tmp226_;
2072 _tmp228_ = bala_scope_lookup (_tmp227_, "RWLock");
2073 _bala_code_node_unref0 (self->grwlock_type)((self->grwlock_type == ((void*)0)) ? ((void*)0) : (self->
grwlock_type = (bala_code_node_unref (self->grwlock_type),
((void*)0))))
;
2074 self->grwlock_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp228_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp228_), ((bala_struct_get_type ())))))
;
2075 _tmp229_ = glib_ns;
2076 _tmp230_ = bala_symbol_get_scope (_tmp229_);
2077 _tmp231_ = _tmp230_;
2078 _tmp232_ = bala_scope_lookup (_tmp231_, "Cond");
2079 _bala_code_node_unref0 (self->gcond_type)((self->gcond_type == ((void*)0)) ? ((void*)0) : (self->
gcond_type = (bala_code_node_unref (self->gcond_type), ((void
*)0))))
;
2080 self->gcond_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp232_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp232_), ((bala_struct_get_type ())))))
;
2081 _tmp233_ = self->grecmutex_type;
2082 _tmp234_ = _bala_code_node_ref0 (_tmp233_);
2083 _bala_code_node_unref0 (self->mutex_type)((self->mutex_type == ((void*)0)) ? ((void*)0) : (self->
mutex_type = (bala_code_node_unref (self->mutex_type), ((void
*)0))))
;
2084 self->mutex_type = _tmp234_;
2085 _tmp235_ = glib_ns;
2086 _tmp236_ = bala_symbol_get_scope (_tmp235_);
2087 _tmp237_ = _tmp236_;
2088 _tmp238_ = bala_scope_lookup (_tmp237_, "TypeModule");
2089 _bala_code_node_unref0 (self->type_module_type)((self->type_module_type == ((void*)0)) ? ((void*)0) : (self
->type_module_type = (bala_code_node_unref (self->type_module_type
), ((void*)0))))
;
2090 self->type_module_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp238_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp238_), ((bala_typesymbol_get_type ())))))
;
2091 _tmp239_ = self->root_symbol;
2092 _tmp240_ = bala_symbol_get_scope (_tmp239_);
2093 _tmp241_ = _tmp240_;
2094 _tmp242_ = bala_scope_lookup (_tmp241_, "GLib");
2095 _tmp243_ = _tmp242_;
2096 _tmp244_ = bala_symbol_get_scope (_tmp243_);
2097 _tmp245_ = _tmp244_;
2098 _tmp246_ = bala_scope_lookup (_tmp245_, "Regex");
2099 _tmp247_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp246_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp246_), ((bala_class_get_type ())))))
;
2100 _tmp248_ = bala_object_type_new ((BalaObjectTypeSymbol*) _tmp247_);
2101 _bala_code_node_unref0 (self->regex_type)((self->regex_type == ((void*)0)) ? ((void*)0) : (self->
regex_type = (bala_code_node_unref (self->regex_type), ((void
*)0))))
;
2102 self->regex_type = (BalaDataType*) _tmp248_;
2103 _bala_code_node_unref0 (_tmp247_)((_tmp247_ == ((void*)0)) ? ((void*)0) : (_tmp247_ = (bala_code_node_unref
(_tmp247_), ((void*)0))))
;
2104 _bala_code_node_unref0 (_tmp243_)((_tmp243_ == ((void*)0)) ? ((void*)0) : (_tmp243_ = (bala_code_node_unref
(_tmp243_), ((void*)0))))
;
2105 _tmp249_ = bala_code_context_get_module_init_method (context);
2106 _tmp250_ = _tmp249_;
2107 if (_tmp250_ != NULL((void*)0)) {
2108 {
2109 BalaList* _parameter_list = NULL((void*)0);
2110 BalaMethod* _tmp251_;
2111 BalaMethod* _tmp252_;
2112 BalaList* _tmp253_;
2113 BalaList* _tmp254_;
2114 gint _parameter_size = 0;
2115 BalaList* _tmp255_;
2116 gint _tmp256_;
2117 gint _tmp257_;
2118 gint _parameter_index = 0;
2119 _tmp251_ = bala_code_context_get_module_init_method (context);
2120 _tmp252_ = _tmp251_;
2121 _tmp253_ = bala_callable_get_parameters ((BalaCallable*) _tmp252_);
2122 _tmp254_ = _bala_iterable_ref0 (_tmp253_);
2123 _parameter_list = _tmp254_;
2124 _tmp255_ = _parameter_list;
2125 _tmp256_ = bala_collection_get_size ((BalaCollection*) _tmp255_);
2126 _tmp257_ = _tmp256_;
2127 _parameter_size = _tmp257_;
2128 _parameter_index = -1;
2129 while (TRUE(!(0))) {
2130 gint _tmp258_;
2131 gint _tmp259_;
2132 BalaParameter* parameter = NULL((void*)0);
2133 BalaList* _tmp260_;
2134 gpointer _tmp261_;
2135 BalaParameter* _tmp262_;
2136 BalaDataType* _tmp263_;
2137 BalaDataType* _tmp264_;
2138 BalaTypeSymbol* _tmp265_;
2139 BalaTypeSymbol* _tmp266_;
2140 BalaTypeSymbol* _tmp267_;
2141 _parameter_index = _parameter_index + 1;
2142 _tmp258_ = _parameter_index;
2143 _tmp259_ = _parameter_size;
2144 if (!(_tmp258_ < _tmp259_)) {
2145 break;
2146 }
2147 _tmp260_ = _parameter_list;
2148 _tmp261_ = bala_list_get (_tmp260_, _parameter_index);
2149 parameter = (BalaParameter*) _tmp261_;
2150 _tmp262_ = parameter;
2151 _tmp263_ = bala_variable_get_variable_type ((BalaVariable*) _tmp262_);
2152 _tmp264_ = _tmp263_;
2153 _tmp265_ = bala_data_type_get_type_symbol (_tmp264_);
2154 _tmp266_ = _tmp265_;
2155 _tmp267_ = self->type_module_type;
2156 if (bala_typesymbol_is_subtype_of (_tmp266_, _tmp267_)) {
2157 BalaParameter* _tmp268_;
2158 const gchar* _tmp269_;
2159 const gchar* _tmp270_;
2160 gchar* _tmp271_;
2161 self->in_plugin = TRUE(!(0));
2162 _tmp268_ = parameter;
2163 _tmp269_ = bala_symbol_get_name ((BalaSymbol*) _tmp268_);
2164 _tmp270_ = _tmp269_;
2165 _tmp271_ = g_strdup (_tmp270_);
2166 _g_free0 (self->module_init_param_name)(self->module_init_param_name = (g_free (self->module_init_param_name
), ((void*)0)))
;
2167 self->module_init_param_name = _tmp271_;
2168 _bala_code_node_unref0 (parameter)((parameter == ((void*)0)) ? ((void*)0) : (parameter = (bala_code_node_unref
(parameter), ((void*)0))))
;
2169 break;
2170 }
2171 _bala_code_node_unref0 (parameter)((parameter == ((void*)0)) ? ((void*)0) : (parameter = (bala_code_node_unref
(parameter), ((void*)0))))
;
2172 }
2173 _bala_iterable_unref0 (_parameter_list)((_parameter_list == ((void*)0)) ? ((void*)0) : (_parameter_list
= (bala_iterable_unref (_parameter_list), ((void*)0))))
;
2174 }
2175 }
2176 _tmp272_ = glib_ns;
2177 _tmp273_ = bala_symbol_get_scope (_tmp272_);
2178 _tmp274_ = _tmp273_;
2179 _tmp275_ = bala_scope_lookup (_tmp274_, "DBusProxy");
2180 _bala_code_node_unref0 (self->dbus_proxy_type)((self->dbus_proxy_type == ((void*)0)) ? ((void*)0) : (self
->dbus_proxy_type = (bala_code_node_unref (self->dbus_proxy_type
), ((void*)0))))
;
2181 self->dbus_proxy_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp275_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp275_), ((bala_typesymbol_get_type ())))))
;
2182 _tmp276_ = glib_ns;
2183 _tmp277_ = bala_symbol_get_scope (_tmp276_);
2184 _tmp278_ = _tmp277_;
2185 _tmp279_ = bala_scope_lookup (_tmp278_, "pointer");
2186 _tmp280_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp279_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp279_), ((bala_struct_get_type ())))))
;
2187 _tmp281_ = bala_struct_value_type_new (_tmp280_);
2188 _bala_code_node_unref0 (self->pointer_type)((self->pointer_type == ((void*)0)) ? ((void*)0) : (self->
pointer_type = (bala_code_node_unref (self->pointer_type),
((void*)0))))
;
2189 self->pointer_type = (BalaDataType*) _tmp281_;
2190 _bala_code_node_unref0 (_tmp280_)((_tmp280_ == ((void*)0)) ? ((void*)0) : (_tmp280_ = (bala_code_node_unref
(_tmp280_), ((void*)0))))
;
2191 _tmp282_ = self->pointer_type;
2192 _tmp283_ = _bala_code_node_ref0 (_tmp282_);
2193 _bala_code_node_unref0 (self->delegate_target_type)((self->delegate_target_type == ((void*)0)) ? ((void*)0) :
(self->delegate_target_type = (bala_code_node_unref (self
->delegate_target_type), ((void*)0))))
;
2194 self->delegate_target_type = _tmp283_;
2195 _tmp284_ = glib_ns;
2196 _tmp285_ = bala_symbol_get_scope (_tmp284_);
2197 _tmp286_ = _tmp285_;
2198 _tmp287_ = bala_scope_lookup (_tmp286_, "DestroyNotify");
2199 _bala_code_node_unref0 (self->priv->destroy_notify)((self->priv->destroy_notify == ((void*)0)) ? ((void*)0
) : (self->priv->destroy_notify = (bala_code_node_unref
(self->priv->destroy_notify), ((void*)0))))
;
2200 self->priv->destroy_notify = G_TYPE_CHECK_INSTANCE_CAST (_tmp287_, BALA_TYPE_DELEGATE, BalaDelegate)(((BalaDelegate*) g_type_check_instance_cast ((GTypeInstance*
) (_tmp287_), ((bala_delegate_get_type ())))))
;
2201 _tmp288_ = self->priv->destroy_notify;
2202 _tmp289_ = bala_delegate_type_new (_tmp288_);
2203 _bala_code_node_unref0 (self->delegate_target_destroy_type)((self->delegate_target_destroy_type == ((void*)0)) ? ((void
*)0) : (self->delegate_target_destroy_type = (bala_code_node_unref
(self->delegate_target_destroy_type), ((void*)0))))
;
2204 self->delegate_target_destroy_type = _tmp289_;
2205 _bala_code_node_unref0 (glib_ns)((glib_ns == ((void*)0)) ? ((void*)0) : (glib_ns = (bala_code_node_unref
(glib_ns), ((void*)0))))
;
2206 } else {
2207 BalaVoidType* _tmp290_;
2208 BalaVoidType* _tmp291_;
2209 BalaPointerType* _tmp292_;
2210 BalaDataType* _tmp293_;
2211 BalaDataType* _tmp294_;
2212 BalaVoidType* _tmp295_;
2213 BalaVoidType* _tmp296_;
2214 BalaDelegate* _tmp297_;
2215 BalaDelegate* _tmp298_;
2216 BalaVoidType* _tmp299_;
2217 BalaVoidType* _tmp300_;
2218 BalaPointerType* _tmp301_;
2219 BalaPointerType* _tmp302_;
2220 BalaParameter* _tmp303_;
2221 BalaParameter* _tmp304_;
2222 BalaDelegate* _tmp305_;
2223 BalaDelegate* _tmp306_;
2224 BalaSymbol* _tmp307_;
2225 BalaScope* _tmp308_;
2226 BalaScope* _tmp309_;
2227 BalaDelegate* _tmp310_;
2228 BalaDelegateType* _tmp311_;
2229 _tmp290_ = bala_void_type_new (NULL((void*)0));
2230 _tmp291_ = _tmp290_;
2231 _tmp292_ = bala_pointer_type_new ((BalaDataType*) _tmp291_, NULL((void*)0));
2232 _bala_code_node_unref0 (self->pointer_type)((self->pointer_type == ((void*)0)) ? ((void*)0) : (self->
pointer_type = (bala_code_node_unref (self->pointer_type),
((void*)0))))
;
2233 self->pointer_type = (BalaDataType*) _tmp292_;
2234 _bala_code_node_unref0 (_tmp291_)((_tmp291_ == ((void*)0)) ? ((void*)0) : (_tmp291_ = (bala_code_node_unref
(_tmp291_), ((void*)0))))
;
2235 _tmp293_ = self->pointer_type;
2236 _tmp294_ = _bala_code_node_ref0 (_tmp293_);
2237 _bala_code_node_unref0 (self->delegate_target_type)((self->delegate_target_type == ((void*)0)) ? ((void*)0) :
(self->delegate_target_type = (bala_code_node_unref (self
->delegate_target_type), ((void*)0))))
;
2238 self->delegate_target_type = _tmp294_;
2239 _tmp295_ = bala_void_type_new (NULL((void*)0));
2240 _tmp296_ = _tmp295_;
2241 _tmp297_ = bala_delegate_new ("BalaDestroyNotify", (BalaDataType*) _tmp296_, NULL((void*)0), NULL((void*)0));
2242 _bala_code_node_unref0 (self->priv->destroy_notify)((self->priv->destroy_notify == ((void*)0)) ? ((void*)0
) : (self->priv->destroy_notify = (bala_code_node_unref
(self->priv->destroy_notify), ((void*)0))))
;
2243 self->priv->destroy_notify = _tmp297_;
2244 _bala_code_node_unref0 (_tmp296_)((_tmp296_ == ((void*)0)) ? ((void*)0) : (_tmp296_ = (bala_code_node_unref
(_tmp296_), ((void*)0))))
;
2245 _tmp298_ = self->priv->destroy_notify;
2246 _tmp299_ = bala_void_type_new (NULL((void*)0));
2247 _tmp300_ = _tmp299_;
2248 _tmp301_ = bala_pointer_type_new ((BalaDataType*) _tmp300_, NULL((void*)0));
2249 _tmp302_ = _tmp301_;
2250 _tmp303_ = bala_parameter_new ("data", (BalaDataType*) _tmp302_, NULL((void*)0));
2251 _tmp304_ = _tmp303_;
2252 bala_callable_add_parameter ((BalaCallable*) _tmp298_, _tmp304_);
2253 _bala_code_node_unref0 (_tmp304_)((_tmp304_ == ((void*)0)) ? ((void*)0) : (_tmp304_ = (bala_code_node_unref
(_tmp304_), ((void*)0))))
;
2254 _bala_code_node_unref0 (_tmp302_)((_tmp302_ == ((void*)0)) ? ((void*)0) : (_tmp302_ = (bala_code_node_unref
(_tmp302_), ((void*)0))))
;
2255 _bala_code_node_unref0 (_tmp300_)((_tmp300_ == ((void*)0)) ? ((void*)0) : (_tmp300_ = (bala_code_node_unref
(_tmp300_), ((void*)0))))
;
2256 _tmp305_ = self->priv->destroy_notify;
2257 bala_delegate_set_has_target (_tmp305_, FALSE(0));
2258 _tmp306_ = self->priv->destroy_notify;
2259 _tmp307_ = self->root_symbol;
2260 _tmp308_ = bala_symbol_get_scope (_tmp307_);
2261 _tmp309_ = _tmp308_;
2262 bala_symbol_set_owner ((BalaSymbol*) _tmp306_, _tmp309_);
2263 _tmp310_ = self->priv->destroy_notify;
2264 _tmp311_ = bala_delegate_type_new (_tmp310_);
2265 _bala_code_node_unref0 (self->delegate_target_destroy_type)((self->delegate_target_destroy_type == ((void*)0)) ? ((void
*)0) : (self->delegate_target_destroy_type = (bala_code_node_unref
(self->delegate_target_destroy_type), ((void*)0))))
;
2266 self->delegate_target_destroy_type = _tmp311_;
2267 }
2268 _tmp312_ = self->root_symbol;
2269 _tmp313_ = bala_symbol_get_scope (_tmp312_);
2270 _tmp314_ = _tmp313_;
2271 _tmp315_ = bala_scope_lookup (_tmp314_, "Gtk");
2272 gtk_ns = _tmp315_;
2273 _tmp316_ = gtk_ns;
2274 if (_tmp316_ != NULL((void*)0)) {
2275 BalaSymbol* _tmp317_;
2276 BalaScope* _tmp318_;
2277 BalaScope* _tmp319_;
2278 BalaSymbol* _tmp320_;
2279 _tmp317_ = gtk_ns;
2280 _tmp318_ = bala_symbol_get_scope (_tmp317_);
2281 _tmp319_ = _tmp318_;
2282 _tmp320_ = bala_scope_lookup (_tmp319_, "Widget");
2283 _bala_code_node_unref0 (self->gtk_widget_type)((self->gtk_widget_type == ((void*)0)) ? ((void*)0) : (self
->gtk_widget_type = (bala_code_node_unref (self->gtk_widget_type
), ((void*)0))))
;
2284 self->gtk_widget_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp320_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp320_), ((bala_class_get_type ())))))
;
2285 }
2286 _tmp321_ = bala_ccode_file_new (NULL((void*)0));
2287 _bala_ccode_file_unref0 (self->header_file)((self->header_file == ((void*)0)) ? ((void*)0) : (self->
header_file = (bala_ccode_file_unref (self->header_file), (
(void*)0))))
;
2288 self->header_file = _tmp321_;
2289 _tmp322_ = self->header_file;
2290 bala_ccode_file_set_is_header (_tmp322_, TRUE(!(0)));
2291 _tmp323_ = bala_ccode_file_new (NULL((void*)0));
2292 _bala_ccode_file_unref0 (self->internal_header_file)((self->internal_header_file == ((void*)0)) ? ((void*)0) :
(self->internal_header_file = (bala_ccode_file_unref (self
->internal_header_file), ((void*)0))))
;
2293 self->internal_header_file = _tmp323_;
2294 _tmp324_ = self->internal_header_file;
2295 bala_ccode_file_set_is_header (_tmp324_, TRUE(!(0)));
2296 _tmp325_ = bala_code_context_get_source_files (context);
2297 _tmp326_ = _bala_iterable_ref0 (_tmp325_);
2298 source_files = _tmp326_;
2299 {
2300 BalaList* _file_list = NULL((void*)0);
2301 BalaList* _tmp327_;
2302 BalaList* _tmp328_;
2303 gint _file_size = 0;
2304 BalaList* _tmp329_;
2305 gint _tmp330_;
2306 gint _tmp331_;
2307 gint _file_index = 0;
2308 _tmp327_ = source_files;
2309 _tmp328_ = _bala_iterable_ref0 (_tmp327_);
2310 _file_list = _tmp328_;
2311 _tmp329_ = _file_list;
2312 _tmp330_ = bala_collection_get_size ((BalaCollection*) _tmp329_);
2313 _tmp331_ = _tmp330_;
2314 _file_size = _tmp331_;
2315 _file_index = -1;
2316 while (TRUE(!(0))) {
2317 gint _tmp332_;
2318 gint _tmp333_;
2319 BalaSourceFile* file = NULL((void*)0);
2320 BalaList* _tmp334_;
2321 gpointer _tmp335_;
2322 gboolean _tmp336_ = FALSE(0);
2323 BalaSourceFile* _tmp337_;
2324 BalaSourceFileType _tmp338_;
2325 BalaSourceFileType _tmp339_;
2326 _file_index = _file_index + 1;
2327 _tmp332_ = _file_index;
2328 _tmp333_ = _file_size;
2329 if (!(_tmp332_ < _tmp333_)) {
2330 break;
2331 }
2332 _tmp334_ = _file_list;
2333 _tmp335_ = bala_list_get (_tmp334_, _file_index);
2334 file = (BalaSourceFile*) _tmp335_;
2335 _tmp337_ = file;
2336 _tmp338_ = bala_source_file_get_file_type (_tmp337_);
2337 _tmp339_ = _tmp338_;
2338 if (_tmp339_ == BALA_SOURCE_FILE_TYPE_SOURCE) {
2339 _tmp336_ = TRUE(!(0));
2340 } else {
2341 gboolean _tmp340_ = FALSE(0);
2342 const gchar* _tmp341_;
2343 const gchar* _tmp342_;
2344 _tmp341_ = bala_code_context_get_header_filename (context);
2345 _tmp342_ = _tmp341_;
2346 if (_tmp342_ != NULL((void*)0)) {
2347 BalaSourceFile* _tmp343_;
2348 BalaSourceFileType _tmp344_;
2349 BalaSourceFileType _tmp345_;
2350 _tmp343_ = file;
2351 _tmp344_ = bala_source_file_get_file_type (_tmp343_);
2352 _tmp345_ = _tmp344_;
2353 _tmp340_ = _tmp345_ == BALA_SOURCE_FILE_TYPE_FAST;
2354 } else {
2355 _tmp340_ = FALSE(0);
2356 }
2357 _tmp336_ = _tmp340_;
2358 }
2359 if (_tmp336_) {
2360 BalaSourceFile* _tmp346_;
2361 _tmp346_ = file;
2362 bala_source_file_accept (_tmp346_, (BalaCodeVisitor*) self);
2363 }
2364 _bala_source_file_unref0 (file)((file == ((void*)0)) ? ((void*)0) : (file = (bala_source_file_unref
(file), ((void*)0))))
;
2365 }
2366 _bala_iterable_unref0 (_file_list)((_file_list == ((void*)0)) ? ((void*)0) : (_file_list = (bala_iterable_unref
(_file_list), ((void*)0))))
;
2367 }
2368 _tmp347_ = bala_code_context_get_symbols_filename (context);
2369 _tmp348_ = _tmp347_;
2370 if (_tmp348_ != NULL((void*)0)) {
2371 FILE* stream = NULL((void*)0);
2372 const gchar* _tmp349_;
2373 const gchar* _tmp350_;
2374 FILE* _tmp351_;
2375 FILE* _tmp352_;
2376 _tmp349_ = bala_code_context_get_symbols_filename (context);
2377 _tmp350_ = _tmp349_;
2378 _tmp351_ = g_fopenfopen (_tmp350_, "w");
2379 stream = _tmp351_;
2380 _tmp352_ = stream;
2381 if (_tmp352_ == NULL((void*)0)) {
2382 const gchar* _tmp353_;
2383 const gchar* _tmp354_;
2384 gchar* _tmp355_;
2385 gchar* _tmp356_;
2386 _tmp353_ = bala_code_context_get_symbols_filename (context);
2387 _tmp354_ = _tmp353_;
2388 _tmp355_ = g_strdup_printf ("unable to open `%s' for writing", _tmp354_);
2389 _tmp356_ = _tmp355_;
2390 bala_report_error (NULL((void*)0), _tmp356_);
2391 _g_free0 (_tmp356_)(_tmp356_ = (g_free (_tmp356_), ((void*)0)));
2392 bala_ccode_base_module_set_context (self, NULL((void*)0));
2393 _fclose0 (stream)((stream == ((void*)0)) ? ((void*)0) : (stream = (fclose (stream
), ((void*)0))))
;
2394 _bala_iterable_unref0 (source_files)((source_files == ((void*)0)) ? ((void*)0) : (source_files = (
bala_iterable_unref (source_files), ((void*)0))))
;
2395 _bala_code_node_unref0 (gtk_ns)((gtk_ns == ((void*)0)) ? ((void*)0) : (gtk_ns = (bala_code_node_unref
(gtk_ns), ((void*)0))))
;
2396 _bala_code_node_unref0 (unichar_struct)((unichar_struct == ((void*)0)) ? ((void*)0) : (unichar_struct
= (bala_code_node_unref (unichar_struct), ((void*)0))))
;
2397 return;
2398 }
2399 {
2400 BalaList* _symbol_list = NULL((void*)0);
2401 BalaCCodeFile* _tmp357_;
2402 BalaList* _tmp358_;
2403 gint _symbol_size = 0;
2404 BalaList* _tmp359_;
2405 gint _tmp360_;
2406 gint _tmp361_;
2407 gint _symbol_index = 0;
2408 _tmp357_ = self->header_file;
2409 _tmp358_ = bala_ccode_file_get_symbols (_tmp357_);
2410 _symbol_list = _tmp358_;
2411 _tmp359_ = _symbol_list;
2412 _tmp360_ = bala_collection_get_size ((BalaCollection*) _tmp359_);
2413 _tmp361_ = _tmp360_;
2414 _symbol_size = _tmp361_;
2415 _symbol_index = -1;
2416 while (TRUE(!(0))) {
2417 gint _tmp362_;
2418 gint _tmp363_;
2419 gchar* symbol = NULL((void*)0);
2420 BalaList* _tmp364_;
2421 gpointer _tmp365_;
2422 FILE* _tmp366_;
2423 const gchar* _tmp367_;
2424 FILE* _tmp368_;
2425 _symbol_index = _symbol_index + 1;
2426 _tmp362_ = _symbol_index;
2427 _tmp363_ = _symbol_size;
2428 if (!(_tmp362_ < _tmp363_)) {
2429 break;
2430 }
2431 _tmp364_ = _symbol_list;
2432 _tmp365_ = bala_list_get (_tmp364_, _symbol_index);
2433 symbol = (gchar*) _tmp365_;
2434 _tmp366_ = stream;
2435 _tmp367_ = symbol;
2436 fputs (_tmp367_, _tmp366_);
2437 _tmp368_ = stream;
2438 fputc ('\n', _tmp368_);
2439 _g_free0 (symbol)(symbol = (g_free (symbol), ((void*)0)));
2440 }
2441 _bala_iterable_unref0 (_symbol_list)((_symbol_list == ((void*)0)) ? ((void*)0) : (_symbol_list = (
bala_iterable_unref (_symbol_list), ((void*)0))))
;
2442 }
2443 _fclose0 (stream)((stream == ((void*)0)) ? ((void*)0) : (stream = (fclose (stream
), ((void*)0))))
;
2444 stream = NULL((void*)0);
2445 _fclose0 (stream)((stream == ((void*)0)) ? ((void*)0) : (stream = (fclose (stream
), ((void*)0))))
;
2446 }
2447 _tmp369_ = bala_code_context_get_header_filename (context);
2448 _tmp370_ = _tmp369_;
2449 if (_tmp370_ != NULL((void*)0)) {
2450 gboolean ret = FALSE(0);
2451 BalaProfile _tmp371_;
2452 BalaProfile _tmp372_;
2453 _tmp371_ = bala_code_context_get_profile (context);
2454 _tmp372_ = _tmp371_;
2455 if (_tmp372_ == BALA_PROFILE_GOBJECT) {
2456 BalaCCodeFile* _tmp373_;
2457 BalaCCodeFile* _tmp374_;
2458 const gchar* _tmp375_;
2459 const gchar* _tmp376_;
2460 gboolean _tmp377_;
2461 gboolean _tmp378_;
2462 _tmp373_ = self->header_file;
2463 bala_ccode_file_add_include (_tmp373_, "glib.h", FALSE(0));
2464 _tmp374_ = self->header_file;
2465 _tmp375_ = bala_code_context_get_header_filename (context);
2466 _tmp376_ = _tmp375_;
2467 _tmp377_ = bala_code_context_get_version_header (context);
2468 _tmp378_ = _tmp377_;
2469 ret = bala_ccode_file_store (_tmp374_, _tmp376_, NULL((void*)0), _tmp378_, FALSE(0), "G_BEGIN_DECLS", "G_END_DECLS");
2470 } else {
2471 BalaCCodeFile* _tmp379_;
2472 const gchar* _tmp380_;
2473 const gchar* _tmp381_;
2474 gboolean _tmp382_;
2475 gboolean _tmp383_;
2476 _tmp379_ = self->header_file;
2477 _tmp380_ = bala_code_context_get_header_filename (context);
2478 _tmp381_ = _tmp380_;
2479 _tmp382_ = bala_code_context_get_version_header (context);
2480 _tmp383_ = _tmp382_;
2481 ret = bala_ccode_file_store (_tmp379_, _tmp381_, NULL((void*)0), _tmp383_, FALSE(0), "#ifdef __cplusplus\nextern \"C\" {\n#endif", "#ifdef __cplusplus\n}\n#endif");
2482 }
2483 if (!ret) {
2484 const gchar* _tmp384_;
2485 const gchar* _tmp385_;
2486 gchar* _tmp386_;
2487 gchar* _tmp387_;
2488 _tmp384_ = bala_code_context_get_header_filename (context);
2489 _tmp385_ = _tmp384_;
2490 _tmp386_ = g_strdup_printf ("unable to open `%s' for writing", _tmp385_);
2491 _tmp387_ = _tmp386_;
2492 bala_report_error (NULL((void*)0), _tmp387_);
2493 _g_free0 (_tmp387_)(_tmp387_ = (g_free (_tmp387_), ((void*)0)));
2494 }
2495 }
2496 _tmp388_ = bala_code_context_get_internal_header_filename (context);
2497 _tmp389_ = _tmp388_;
2498 if (_tmp389_ != NULL((void*)0)) {
2499 gboolean ret = FALSE(0);
2500 BalaProfile _tmp390_;
2501 BalaProfile _tmp391_;
2502 _tmp390_ = bala_code_context_get_profile (context);
2503 _tmp391_ = _tmp390_;
2504 if (_tmp391_ == BALA_PROFILE_GOBJECT) {
2505 BalaCCodeFile* _tmp392_;
2506 BalaCCodeFile* _tmp393_;
2507 const gchar* _tmp394_;
2508 const gchar* _tmp395_;
2509 gboolean _tmp396_;
2510 gboolean _tmp397_;
2511 _tmp392_ = self->internal_header_file;
2512 bala_ccode_file_add_include (_tmp392_, "glib.h", FALSE(0));
2513 _tmp393_ = self->internal_header_file;
2514 _tmp394_ = bala_code_context_get_internal_header_filename (context);
2515 _tmp395_ = _tmp394_;
2516 _tmp396_ = bala_code_context_get_version_header (context);
2517 _tmp397_ = _tmp396_;
2518 ret = bala_ccode_file_store (_tmp393_, _tmp395_, NULL((void*)0), _tmp397_, FALSE(0), "G_BEGIN_DECLS", "G_END_DECLS");
2519 } else {
2520 BalaCCodeFile* _tmp398_;
2521 const gchar* _tmp399_;
2522 const gchar* _tmp400_;
2523 gboolean _tmp401_;
2524 gboolean _tmp402_;
2525 _tmp398_ = self->internal_header_file;
2526 _tmp399_ = bala_code_context_get_internal_header_filename (context);
2527 _tmp400_ = _tmp399_;
2528 _tmp401_ = bala_code_context_get_version_header (context);
2529 _tmp402_ = _tmp401_;
2530 ret = bala_ccode_file_store (_tmp398_, _tmp400_, NULL((void*)0), _tmp402_, FALSE(0), "#ifdef __cplusplus\nextern \"C\" {\n#endif", "#ifdef __cplusplus\n}\n#endif");
2531 }
2532 if (!ret) {
2533 const gchar* _tmp403_;
2534 const gchar* _tmp404_;
2535 gchar* _tmp405_;
2536 gchar* _tmp406_;
2537 _tmp403_ = bala_code_context_get_internal_header_filename (context);
2538 _tmp404_ = _tmp403_;
2539 _tmp405_ = g_strdup_printf ("unable to open `%s' for writing", _tmp404_);
2540 _tmp406_ = _tmp405_;
2541 bala_report_error (NULL((void*)0), _tmp406_);
2542 _g_free0 (_tmp406_)(_tmp406_ = (g_free (_tmp406_), ((void*)0)));
2543 }
2544 }
2545 bala_ccode_base_module_set_context (self, NULL((void*)0));
2546 _bala_iterable_unref0 (source_files)((source_files == ((void*)0)) ? ((void*)0) : (source_files = (
bala_iterable_unref (source_files), ((void*)0))))
;
2547 _bala_code_node_unref0 (gtk_ns)((gtk_ns == ((void*)0)) ? ((void*)0) : (gtk_ns = (bala_code_node_unref
(gtk_ns), ((void*)0))))
;
2548 _bala_code_node_unref0 (unichar_struct)((unichar_struct == ((void*)0)) ? ((void*)0) : (unichar_struct
= (bala_code_node_unref (unichar_struct), ((void*)0))))
;
2549}
2550
2551static gpointer
2552_bala_ccode_base_module_emit_context_ref0 (gpointer self)
2553{
2554 return self ? bala_ccode_base_module_emit_context_ref (self) : NULL((void*)0);
2555}
2556
2557void
2558bala_ccode_base_module_push_context (BalaCCodeBaseModule* self,
2559 BalaCCodeBaseModuleEmitContext* emit_context)
2560{
2561 BalaCCodeBaseModuleEmitContext* _tmp0_;
2562 BalaCCodeBaseModuleEmitContext* _tmp3_;
2563 BalaCCodeFunction* _tmp4_;
2564 BalaCCodeFunction* _tmp5_;
2565 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
39
Taking true branch
40
Loop condition is false. Exiting loop
2566 g_return_if_fail (emit_context != NULL)do { if ((emit_context != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "emit_context != NULL"
); return; } } while (0)
;
41
Taking true branch
42
Loop condition is false. Exiting loop
2567 _tmp0_ = self->emit_context;
2568 if (_tmp0_ != NULL((void*)0)) {
43
Assuming '_tmp0_' is equal to NULL
44
Taking false branch
2569 BalaList* _tmp1_;
2570 BalaCCodeBaseModuleEmitContext* _tmp2_;
2571 _tmp1_ = self->priv->emit_context_stack;
2572 _tmp2_ = self->emit_context;
2573 bala_collection_add ((BalaCollection*) _tmp1_, _tmp2_);
2574 }
2575 _tmp3_ = _bala_ccode_base_module_emit_context_ref0 (emit_context);
2576 _bala_ccode_base_module_emit_context_unref0 (self->emit_context)((self->emit_context == ((void*)0)) ? ((void*)0) : (self->
emit_context = (bala_ccode_base_module_emit_context_unref (self
->emit_context), ((void*)0))))
;
45
'?' condition is true
2577 self->emit_context = _tmp3_;
2578 _tmp4_ = bala_ccode_base_module_get_ccode (self);
46
Calling 'bala_ccode_base_module_get_ccode'
50
Returning from 'bala_ccode_base_module_get_ccode'
2579 _tmp5_ = _tmp4_;
2580 if (_tmp5_ != NULL((void*)0)) {
51
Assuming '_tmp5_' is equal to NULL
52
Taking false branch
2581 BalaCCodeFunction* _tmp6_;
2582 BalaCCodeFunction* _tmp7_;
2583 BalaCCodeLineDirective* _tmp8_;
2584 _tmp6_ = bala_ccode_base_module_get_ccode (self);
2585 _tmp7_ = _tmp6_;
2586 _tmp8_ = self->current_line;
2587 bala_ccode_function_set_current_line (_tmp7_, _tmp8_);
2588 }
2589}
2590
2591void
2592bala_ccode_base_module_pop_context (BalaCCodeBaseModule* self)
2593{
2594 BalaList* _tmp0_;
2595 gint _tmp1_;
2596 gint _tmp2_;
2597 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
79
Taking true branch
80
Loop condition is false. Exiting loop
2598 _tmp0_ = self->priv->emit_context_stack;
2599 _tmp1_ = bala_collection_get_size ((BalaCollection*) _tmp0_);
2600 _tmp2_ = _tmp1_;
2601 if (_tmp2_ > 0) {
81
Assuming '_tmp2_' is <= 0
82
Taking false branch
2602 BalaList* _tmp3_;
2603 BalaList* _tmp4_;
2604 gint _tmp5_;
2605 gint _tmp6_;
2606 gpointer _tmp7_;
2607 BalaCCodeFunction* _tmp8_;
2608 BalaCCodeFunction* _tmp9_;
2609 _tmp3_ = self->priv->emit_context_stack;
2610 _tmp4_ = self->priv->emit_context_stack;
2611 _tmp5_ = bala_collection_get_size ((BalaCollection*) _tmp4_);
2612 _tmp6_ = _tmp5_;
2613 _tmp7_ = bala_list_remove_at (_tmp3_, _tmp6_ - 1);
2614 _bala_ccode_base_module_emit_context_unref0 (self->emit_context)((self->emit_context == ((void*)0)) ? ((void*)0) : (self->
emit_context = (bala_ccode_base_module_emit_context_unref (self
->emit_context), ((void*)0))))
;
2615 self->emit_context = (BalaCCodeBaseModuleEmitContext*) _tmp7_;
2616 _tmp8_ = bala_ccode_base_module_get_ccode (self);
2617 _tmp9_ = _tmp8_;
2618 if (_tmp9_ != NULL((void*)0)) {
2619 BalaCCodeFunction* _tmp10_;
2620 BalaCCodeFunction* _tmp11_;
2621 BalaCCodeLineDirective* _tmp12_;
2622 _tmp10_ = bala_ccode_base_module_get_ccode (self);
2623 _tmp11_ = _tmp10_;
2624 _tmp12_ = self->current_line;
2625 bala_ccode_function_set_current_line (_tmp11_, _tmp12_);
2626 }
2627 } else {
2628 _bala_ccode_base_module_emit_context_unref0 (self->emit_context)((self->emit_context == ((void*)0)) ? ((void*)0) : (self->
emit_context = (bala_ccode_base_module_emit_context_unref (self
->emit_context), ((void*)0))))
;
83
'?' condition is false
2629 self->emit_context = NULL((void*)0);
84
Null pointer value stored to field 'emit_context'
2630 }
2631}
2632
2633void
2634bala_ccode_base_module_push_line (BalaCCodeBaseModule* self,
2635 BalaSourceReference* source_reference)
2636{
2637 BalaList* _tmp0_;
2638 BalaCCodeLineDirective* _tmp1_;
2639 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
2640 _tmp0_ = self->priv->line_directive_stack;
2641 _tmp1_ = self->current_line;
2642 bala_collection_add ((BalaCollection*) _tmp0_, _tmp1_);
2643 if (source_reference != NULL((void*)0)) {
2644 BalaSourceFile* _tmp2_;
2645 BalaSourceFile* _tmp3_;
2646 gchar* _tmp4_;
2647 gchar* _tmp5_;
2648 BalaSourceLocation _tmp6_ = {0};
2649 BalaSourceLocation _tmp7_;
2650 BalaCCodeLineDirective* _tmp8_;
2651 BalaCCodeFunction* _tmp9_;
2652 BalaCCodeFunction* _tmp10_;
2653 _tmp2_ = bala_source_reference_get_file (source_reference);
2654 _tmp3_ = _tmp2_;
2655 _tmp4_ = bala_source_file_get_relative_filename (_tmp3_);
2656 _tmp5_ = _tmp4_;
2657 bala_source_reference_get_begin (source_reference, &_tmp6_);
2658 _tmp7_ = _tmp6_;
2659 _tmp8_ = bala_ccode_line_directive_new (_tmp5_, _tmp7_.line);
2660 _bala_ccode_node_unref0 (self->current_line)((self->current_line == ((void*)0)) ? ((void*)0) : (self->
current_line = (bala_ccode_node_unref (self->current_line)
, ((void*)0))))
;
2661 self->current_line = _tmp8_;
2662 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
2663 _tmp9_ = bala_ccode_base_module_get_ccode (self);
2664 _tmp10_ = _tmp9_;
2665 if (_tmp10_ != NULL((void*)0)) {
2666 BalaCCodeFunction* _tmp11_;
2667 BalaCCodeFunction* _tmp12_;
2668 BalaCCodeLineDirective* _tmp13_;
2669 _tmp11_ = bala_ccode_base_module_get_ccode (self);
2670 _tmp12_ = _tmp11_;
2671 _tmp13_ = self->current_line;
2672 bala_ccode_function_set_current_line (_tmp12_, _tmp13_);
2673 }
2674 }
2675}
2676
2677void
2678bala_ccode_base_module_pop_line (BalaCCodeBaseModule* self)
2679{
2680 BalaList* _tmp0_;
2681 BalaList* _tmp1_;
2682 gint _tmp2_;
2683 gint _tmp3_;
2684 gpointer _tmp4_;
2685 BalaCCodeFunction* _tmp5_;
2686 BalaCCodeFunction* _tmp6_;
2687 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
2688 _tmp0_ = self->priv->line_directive_stack;
2689 _tmp1_ = self->priv->line_directive_stack;
2690 _tmp2_ = bala_collection_get_size ((BalaCollection*) _tmp1_);
2691 _tmp3_ = _tmp2_;
2692 _tmp4_ = bala_list_remove_at (_tmp0_, _tmp3_ - 1);
2693 _bala_ccode_node_unref0 (self->current_line)((self->current_line == ((void*)0)) ? ((void*)0) : (self->
current_line = (bala_ccode_node_unref (self->current_line)
, ((void*)0))))
;
2694 self->current_line = (BalaCCodeLineDirective*) _tmp4_;
2695 _tmp5_ = bala_ccode_base_module_get_ccode (self);
2696 _tmp6_ = _tmp5_;
2697 if (_tmp6_ != NULL((void*)0)) {
2698 BalaCCodeFunction* _tmp7_;
2699 BalaCCodeFunction* _tmp8_;
2700 BalaCCodeLineDirective* _tmp9_;
2701 _tmp7_ = bala_ccode_base_module_get_ccode (self);
2702 _tmp8_ = _tmp7_;
2703 _tmp9_ = self->current_line;
2704 bala_ccode_function_set_current_line (_tmp8_, _tmp9_);
2705 }
2706}
2707
2708static gpointer
2709_bala_ccode_node_ref0 (gpointer self)
2710{
2711 return self ? bala_ccode_node_ref (self) : NULL((void*)0);
2712}
2713
2714void
2715bala_ccode_base_module_push_function (BalaCCodeBaseModule* self,
2716 BalaCCodeFunction* func)
2717{
2718 BalaCCodeBaseModuleEmitContext* _tmp0_;
2719 BalaArrayList* _tmp1_;
2720 BalaCCodeFunction* _tmp2_;
2721 BalaCCodeFunction* _tmp3_;
2722 BalaCCodeBaseModuleEmitContext* _tmp4_;
2723 BalaCCodeFunction* _tmp5_;
2724 BalaCCodeFunction* _tmp6_;
2725 BalaCCodeFunction* _tmp7_;
2726 BalaCCodeLineDirective* _tmp8_;
2727 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
2728 g_return_if_fail (func != NULL)do { if ((func != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "func != NULL"
); return; } } while (0)
;
2729 _tmp0_ = self->emit_context;
2730 _tmp1_ = _tmp0_->ccode_stack;
2731 _tmp2_ = bala_ccode_base_module_get_ccode (self);
2732 _tmp3_ = _tmp2_;
2733 bala_collection_add ((BalaCollection*) _tmp1_, _tmp3_);
2734 _tmp4_ = self->emit_context;
2735 _tmp5_ = _bala_ccode_node_ref0 (func);
2736 _bala_ccode_node_unref0 (_tmp4_->ccode)((_tmp4_->ccode == ((void*)0)) ? ((void*)0) : (_tmp4_->
ccode = (bala_ccode_node_unref (_tmp4_->ccode), ((void*)0)
)))
;
2737 _tmp4_->ccode = _tmp5_;
2738 _tmp6_ = bala_ccode_base_module_get_ccode (self);
2739 _tmp7_ = _tmp6_;
2740 _tmp8_ = self->current_line;
2741 bala_ccode_function_set_current_line (_tmp7_, _tmp8_);
2742}
2743
2744void
2745bala_ccode_base_module_pop_function (BalaCCodeBaseModule* self)
2746{
2747 BalaCCodeBaseModuleEmitContext* _tmp0_;
2748 BalaCCodeBaseModuleEmitContext* _tmp1_;
2749 BalaArrayList* _tmp2_;
2750 BalaCCodeBaseModuleEmitContext* _tmp3_;
2751 BalaArrayList* _tmp4_;
2752 gint _tmp5_;
2753 gint _tmp6_;
2754 gpointer _tmp7_;
2755 BalaCCodeFunction* _tmp8_;
2756 BalaCCodeFunction* _tmp9_;
2757 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
65
Taking true branch
66
Loop condition is false. Exiting loop
2758 _tmp0_ = self->emit_context;
2759 _tmp1_ = self->emit_context;
2760 _tmp2_ = _tmp1_->ccode_stack;
2761 _tmp3_ = self->emit_context;
2762 _tmp4_ = _tmp3_->ccode_stack;
2763 _tmp5_ = bala_collection_get_size ((BalaCollection*) _tmp4_);
2764 _tmp6_ = _tmp5_;
2765 _tmp7_ = bala_list_remove_at ((BalaList*) _tmp2_, _tmp6_ - 1);
2766 _bala_ccode_node_unref0 (_tmp0_->ccode)((_tmp0_->ccode == ((void*)0)) ? ((void*)0) : (_tmp0_->
ccode = (bala_ccode_node_unref (_tmp0_->ccode), ((void*)0)
)))
;
67
Assuming field 'ccode' is not equal to null
68
'?' condition is false
2767 _tmp0_->ccode = (BalaCCodeFunction*) _tmp7_;
2768 _tmp8_ = bala_ccode_base_module_get_ccode (self);
69
Calling 'bala_ccode_base_module_get_ccode'
73
Returning from 'bala_ccode_base_module_get_ccode'
2769 _tmp9_ = _tmp8_;
2770 if (_tmp9_ != NULL((void*)0)) {
74
Assuming '_tmp9_' is equal to NULL
75
Taking false branch
2771 BalaCCodeFunction* _tmp10_;
2772 BalaCCodeFunction* _tmp11_;
2773 BalaCCodeLineDirective* _tmp12_;
2774 _tmp10_ = bala_ccode_base_module_get_ccode (self);
2775 _tmp11_ = _tmp10_;
2776 _tmp12_ = self->current_line;
2777 bala_ccode_function_set_current_line (_tmp11_, _tmp12_);
2778 }
2779}
76
Returning without writing to 'self->emit_context'
2780
2781gboolean
2782bala_ccode_base_module_add_symbol_declaration (BalaCCodeBaseModule* self,
2783 BalaCCodeFile* decl_space,
2784 BalaSymbol* sym,
2785 const gchar* name)
2786{
2787 BalaSourceReference* _tmp0_;
2788 BalaSourceReference* _tmp1_;
2789 gboolean _tmp6_;
2790 gboolean _tmp7_;
2791 gboolean _tmp15_ = FALSE(0);
2792 gboolean _tmp18_ = FALSE(0);
2793 gboolean _tmp19_ = FALSE(0);
2794 gboolean _tmp20_;
2795 gboolean _tmp21_;
2796 gboolean result = FALSE(0);
2797 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
2798 g_return_val_if_fail (decl_space != NULL, FALSE)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return ((0)); } } while (0)
;
2799 g_return_val_if_fail (sym != NULL, FALSE)do { if ((sym != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "sym != NULL")
; return ((0)); } } while (0)
;
2800 g_return_val_if_fail (name != NULL, FALSE)do { if ((name != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "name != NULL"
); return ((0)); } } while (0)
;
2801 if (bala_ccode_file_add_declaration (decl_space, name)) {
2802 result = TRUE(!(0));
2803 return result;
2804 }
2805 _tmp0_ = bala_code_node_get_source_reference ((BalaCodeNode*) sym);
2806 _tmp1_ = _tmp0_;
2807 if (_tmp1_ != NULL((void*)0)) {
2808 BalaSourceReference* _tmp2_;
2809 BalaSourceReference* _tmp3_;
2810 BalaSourceFile* _tmp4_;
2811 BalaSourceFile* _tmp5_;
2812 _tmp2_ = bala_code_node_get_source_reference ((BalaCodeNode*) sym);
2813 _tmp3_ = _tmp2_;
2814 _tmp4_ = bala_source_reference_get_file (_tmp3_);
2815 _tmp5_ = _tmp4_;
2816 bala_source_file_set_used (_tmp5_, TRUE(!(0)));
2817 }
2818 _tmp6_ = bala_symbol_get_anonymous (sym);
2819 _tmp7_ = _tmp6_;
2820 if (_tmp7_) {
2821 gboolean _tmp8_ = FALSE(0);
2822 gboolean _tmp9_;
2823 gboolean _tmp10_;
2824 _tmp9_ = bala_ccode_file_get_is_header (decl_space);
2825 _tmp10_ = _tmp9_;
2826 if (!_tmp10_) {
2827 BalaCodeContext* _tmp11_;
2828 BalaCodeContext* _tmp12_;
2829 gboolean _tmp13_;
2830 gboolean _tmp14_;
2831 _tmp11_ = bala_code_context_get ();
2832 _tmp12_ = _tmp11_;
2833 _tmp13_ = bala_code_context_get_use_header (_tmp12_);
2834 _tmp14_ = _tmp13_;
2835 _tmp8_ = _tmp14_;
2836 _bala_code_context_unref0 (_tmp12_)((_tmp12_ == ((void*)0)) ? ((void*)0) : (_tmp12_ = (bala_code_context_unref
(_tmp12_), ((void*)0))))
;
2837 } else {
2838 _tmp8_ = FALSE(0);
2839 }
2840 result = _tmp8_;
2841 return result;
2842 }
2843 if (G_TYPE_CHECK_INSTANCE_TYPE (sym, BALA_TYPE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
sym); GType __t = ((bala_constant_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
2844 BalaExpression* _tmp16_;
2845 BalaExpression* _tmp17_;
2846 _tmp16_ = bala_constant_get_value (G_TYPE_CHECK_INSTANCE_CAST (sym, BALA_TYPE_CONSTANT, BalaConstant)(((BalaConstant*) g_type_check_instance_cast ((GTypeInstance*
) (sym), ((bala_constant_get_type ())))))
);
2847 _tmp17_ = _tmp16_;
2848 _tmp15_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, BALA_TYPE_INITIALIZER_LIST)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp17_); GType __t = ((bala_initializer_list_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
2849 } else {
2850 _tmp15_ = FALSE(0);
2851 }
2852 if (_tmp15_) {
2853 result = FALSE(0);
2854 return result;
2855 }
2856 _tmp20_ = bala_symbol_get_external_package (sym);
2857 _tmp21_ = _tmp20_;
2858 if (_tmp21_) {
2859 _tmp19_ = TRUE(!(0));
2860 } else {
2861 gboolean _tmp22_ = FALSE(0);
2862 gboolean _tmp23_ = FALSE(0);
2863 gboolean _tmp24_;
2864 gboolean _tmp25_;
2865 _tmp24_ = bala_ccode_file_get_is_header (decl_space);
2866 _tmp25_ = _tmp24_;
2867 if (!_tmp25_) {
2868 BalaCodeContext* _tmp26_;
2869 BalaCodeContext* _tmp27_;
2870 gboolean _tmp28_;
2871 gboolean _tmp29_;
2872 _tmp26_ = bala_code_context_get ();
2873 _tmp27_ = _tmp26_;
2874 _tmp28_ = bala_code_context_get_use_header (_tmp27_);
2875 _tmp29_ = _tmp28_;
2876 _tmp23_ = _tmp29_;
2877 _bala_code_context_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_code_context_unref
(_tmp27_), ((void*)0))))
;
2878 } else {
2879 _tmp23_ = FALSE(0);
2880 }
2881 if (_tmp23_) {
2882 _tmp22_ = !bala_symbol_is_internal_symbol (sym);
2883 } else {
2884 _tmp22_ = FALSE(0);
2885 }
2886 _tmp19_ = _tmp22_;
2887 }
2888 if (_tmp19_) {
2889 _tmp18_ = TRUE(!(0));
2890 } else {
2891 gboolean _tmp30_ = FALSE(0);
2892 gboolean _tmp31_;
2893 gboolean _tmp32_;
2894 _tmp31_ = bala_symbol_get_is_extern (sym);
2895 _tmp32_ = _tmp31_;
2896 if (_tmp32_) {
2897 gchar* _tmp33_;
2898 gchar* _tmp34_;
2899 gint _tmp35_;
2900 gint _tmp36_;
2901 _tmp33_ = bala_get_ccode_header_filenames (sym);
2902 _tmp34_ = _tmp33_;
2903 _tmp35_ = strlen (_tmp34_);
2904 _tmp36_ = _tmp35_;
2905 _tmp30_ = _tmp36_ > 0;
2906 _g_free0 (_tmp34_)(_tmp34_ = (g_free (_tmp34_), ((void*)0)));
2907 } else {
2908 _tmp30_ = FALSE(0);
2909 }
2910 _tmp18_ = _tmp30_;
2911 }
2912 if (_tmp18_) {
2913 gchar* _tmp37_;
2914 gchar* _tmp38_;
2915 gchar** _tmp39_;
2916 gchar** _tmp40_;
2917 gchar** _tmp41_;
2918 gint _tmp41__length1;
2919 gchar* _tmp43_;
2920 gchar* _tmp44_;
2921 gchar** _tmp45_;
2922 gchar** _tmp46_;
2923 gchar** _tmp47_;
2924 gint _tmp47__length1;
2925 _tmp37_ = bala_get_ccode_feature_test_macros (sym);
2926 _tmp38_ = _tmp37_;
2927 _tmp40_ = _tmp39_ = g_strsplit (_tmp38_, ",", 0);
2928 _tmp41_ = _tmp40_;
2929 _tmp41__length1 = _bala_array_length (_tmp39_);
2930 _g_free0 (_tmp38_)(_tmp38_ = (g_free (_tmp38_), ((void*)0)));
2931 {
2932 gchar** feature_test_macro_collection = NULL((void*)0);
2933 gint feature_test_macro_collection_length1 = 0;
2934 gint _feature_test_macro_collection_size_ = 0;
2935 gint feature_test_macro_it = 0;
2936 feature_test_macro_collection = _tmp41_;
2937 feature_test_macro_collection_length1 = _tmp41__length1;
2938 for (feature_test_macro_it = 0; feature_test_macro_it < feature_test_macro_collection_length1; feature_test_macro_it = feature_test_macro_it + 1) {
2939 const gchar* feature_test_macro = NULL((void*)0);
2940 feature_test_macro = feature_test_macro_collection[feature_test_macro_it];
2941 {
2942 const gchar* _tmp42_;
2943 _tmp42_ = feature_test_macro;
2944 bala_ccode_file_add_feature_test_macro (decl_space, _tmp42_);
2945 }
2946 }
2947 feature_test_macro_collection = (_bala_array_free (feature_test_macro_collection, feature_test_macro_collection_length1, (GDestroyNotify) g_free), NULL((void*)0));
2948 }
2949 _tmp43_ = bala_get_ccode_header_filenames (sym);
2950 _tmp44_ = _tmp43_;
2951 _tmp46_ = _tmp45_ = g_strsplit (_tmp44_, ",", 0);
2952 _tmp47_ = _tmp46_;
2953 _tmp47__length1 = _bala_array_length (_tmp45_);
2954 _g_free0 (_tmp44_)(_tmp44_ = (g_free (_tmp44_), ((void*)0)));
2955 {
2956 gchar** header_filename_collection = NULL((void*)0);
2957 gint header_filename_collection_length1 = 0;
2958 gint _header_filename_collection_size_ = 0;
2959 gint header_filename_it = 0;
2960 header_filename_collection = _tmp47_;
2961 header_filename_collection_length1 = _tmp47__length1;
2962 for (header_filename_it = 0; header_filename_it < header_filename_collection_length1; header_filename_it = header_filename_it + 1) {
2963 const gchar* header_filename = NULL((void*)0);
2964 header_filename = header_filename_collection[header_filename_it];
2965 {
2966 gboolean _tmp48_ = FALSE(0);
2967 gboolean _tmp49_;
2968 gboolean _tmp50_;
2969 const gchar* _tmp59_;
2970 _tmp49_ = bala_symbol_get_is_extern (sym);
2971 _tmp50_ = _tmp49_;
2972 if (!_tmp50_) {
2973 gboolean _tmp51_ = FALSE(0);
2974 gboolean _tmp52_;
2975 gboolean _tmp53_;
2976 _tmp52_ = bala_symbol_get_external_package (sym);
2977 _tmp53_ = _tmp52_;
2978 if (!_tmp53_) {
2979 _tmp51_ = TRUE(!(0));
2980 } else {
2981 gboolean _tmp54_ = FALSE(0);
2982 gboolean _tmp55_;
2983 gboolean _tmp56_;
2984 _tmp55_ = bala_symbol_get_external_package (sym);
2985 _tmp56_ = _tmp55_;
2986 if (_tmp56_) {
2987 gboolean _tmp57_;
2988 gboolean _tmp58_;
2989 _tmp57_ = bala_symbol_get_from_commandline (sym);
2990 _tmp58_ = _tmp57_;
2991 _tmp54_ = _tmp58_;
2992 } else {
2993 _tmp54_ = FALSE(0);
2994 }
2995 _tmp51_ = _tmp54_;
2996 }
2997 _tmp48_ = _tmp51_;
2998 } else {
2999 _tmp48_ = FALSE(0);
3000 }
3001 _tmp59_ = header_filename;
3002 bala_ccode_file_add_include (decl_space, _tmp59_, _tmp48_);
3003 }
3004 }
3005 header_filename_collection = (_bala_array_free (header_filename_collection, header_filename_collection_length1, (GDestroyNotify) g_free), NULL((void*)0));
3006 }
3007 result = TRUE(!(0));
3008 return result;
3009 } else {
3010 result = FALSE(0);
3011 return result;
3012 }
3013}
3014
3015static void
3016bala_ccode_base_module_real_append_bala_array_free (BalaCCodeBaseModule* self)
3017{
3018}
3019
3020void
3021bala_ccode_base_module_append_bala_array_free (BalaCCodeBaseModule* self)
3022{
3023 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
3024 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->append_bala_array_free (self);
3025}
3026
3027static void
3028bala_ccode_base_module_real_append_bala_array_move (BalaCCodeBaseModule* self)
3029{
3030}
3031
3032void
3033bala_ccode_base_module_append_bala_array_move (BalaCCodeBaseModule* self)
3034{
3035 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
3036 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->append_bala_array_move (self);
3037}
3038
3039static void
3040bala_ccode_base_module_real_append_bala_array_length (BalaCCodeBaseModule* self)
3041{
3042}
3043
3044void
3045bala_ccode_base_module_append_bala_array_length (BalaCCodeBaseModule* self)
3046{
3047 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
3048 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->append_bala_array_length (self);
3049}
3050
3051static void
3052bala_ccode_base_module_real_append_params_array (BalaCCodeBaseModule* self,
3053 BalaMethod* m)
3054{
3055 g_return_if_fail (m != NULL)do { if ((m != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "m != NULL"); return
; } } while (0)
;
3056}
3057
3058void
3059bala_ccode_base_module_append_params_array (BalaCCodeBaseModule* self,
3060 BalaMethod* m)
3061{
3062 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
3063 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->append_params_array (self, m);
3064}
3065
3066void
3067bala_ccode_base_module_append_bala_clear_mutex (BalaCCodeBaseModule* self,
3068 const gchar* typename,
3069 const gchar* funcprefix)
3070{
3071 BalaCCodeFile* _tmp0_;
3072 BalaCCodeFunction* fun = NULL((void*)0);
3073 gchar* _tmp1_;
3074 gchar* _tmp2_;
3075 BalaCCodeFunction* _tmp3_;
3076 BalaCCodeFunction* _tmp4_;
3077 gchar* _tmp5_;
3078 gchar* _tmp6_;
3079 BalaCCodeParameter* _tmp7_;
3080 BalaCCodeParameter* _tmp8_;
3081 BalaCCodeFunction* _tmp9_;
3082 BalaCCodeFunction* _tmp10_;
3083 BalaCCodeConstant* _tmp11_;
3084 BalaCCodeConstant* _tmp12_;
3085 BalaCCodeVariableDeclarator* _tmp13_;
3086 BalaCCodeVariableDeclarator* _tmp14_;
3087 BalaCCodeFunctionCall* cmp = NULL((void*)0);
3088 BalaCCodeIdentifier* _tmp15_;
3089 BalaCCodeIdentifier* _tmp16_;
3090 BalaCCodeFunctionCall* _tmp17_;
3091 BalaCCodeFunctionCall* _tmp18_;
3092 BalaCCodeIdentifier* _tmp19_;
3093 BalaCCodeIdentifier* _tmp20_;
3094 BalaCCodeIdentifier* _tmp21_;
3095 BalaCCodeIdentifier* _tmp22_;
3096 BalaCCodeUnaryExpression* _tmp23_;
3097 BalaCCodeUnaryExpression* _tmp24_;
3098 gchar* _tmp25_;
3099 gchar* _tmp26_;
3100 gchar* _tmp27_;
3101 gchar* _tmp28_;
3102 BalaCCodeIdentifier* _tmp29_;
3103 BalaCCodeIdentifier* _tmp30_;
3104 BalaCCodeFunction* _tmp31_;
3105 BalaCCodeFunction* _tmp32_;
3106 BalaCCodeFunctionCall* mutex_clear = NULL((void*)0);
3107 gchar* _tmp33_;
3108 gchar* _tmp34_;
3109 BalaCCodeIdentifier* _tmp35_;
3110 BalaCCodeIdentifier* _tmp36_;
3111 BalaCCodeFunctionCall* _tmp37_;
3112 BalaCCodeFunctionCall* _tmp38_;
3113 BalaCCodeIdentifier* _tmp39_;
3114 BalaCCodeIdentifier* _tmp40_;
3115 BalaCCodeFunction* _tmp41_;
3116 BalaCCodeFunction* _tmp42_;
3117 BalaCCodeFunctionCall* mset = NULL((void*)0);
3118 BalaCCodeIdentifier* _tmp43_;
3119 BalaCCodeIdentifier* _tmp44_;
3120 BalaCCodeFunctionCall* _tmp45_;
3121 BalaCCodeFunctionCall* _tmp46_;
3122 BalaCCodeIdentifier* _tmp47_;
3123 BalaCCodeIdentifier* _tmp48_;
3124 BalaCCodeConstant* _tmp49_;
3125 BalaCCodeConstant* _tmp50_;
3126 gchar* _tmp51_;
3127 gchar* _tmp52_;
3128 gchar* _tmp53_;
3129 gchar* _tmp54_;
3130 BalaCCodeIdentifier* _tmp55_;
3131 BalaCCodeIdentifier* _tmp56_;
3132 BalaCCodeFunction* _tmp57_;
3133 BalaCCodeFunction* _tmp58_;
3134 BalaCCodeFunction* _tmp59_;
3135 BalaCCodeFunction* _tmp60_;
3136 BalaCCodeFile* _tmp61_;
3137 BalaCCodeFile* _tmp62_;
3138 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
3139 g_return_if_fail (typename != NULL)do { if ((typename != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "typename != NULL"
); return; } } while (0)
;
3140 g_return_if_fail (funcprefix != NULL)do { if ((funcprefix != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "funcprefix != NULL"
); return; } } while (0)
;
3141 _tmp0_ = self->cfile;
3142 bala_ccode_file_add_include (_tmp0_, "string.h", FALSE(0));
3143 _tmp1_ = g_strconcat ("_bala_clear_", typename, NULL((void*)0));
3144 _tmp2_ = _tmp1_;
3145 _tmp3_ = bala_ccode_function_new (_tmp2_, "void");
3146 _tmp4_ = _tmp3_;
3147 _g_free0 (_tmp2_)(_tmp2_ = (g_free (_tmp2_), ((void*)0)));
3148 fun = _tmp4_;
3149 bala_ccode_node_set_modifiers ((BalaCCodeNode*) fun, BALA_CCODE_MODIFIERS_STATIC);
3150 _tmp5_ = g_strconcat (typename, " *", NULL((void*)0));
3151 _tmp6_ = _tmp5_;
3152 _tmp7_ = bala_ccode_parameter_new ("mutex", _tmp6_);
3153 _tmp8_ = _tmp7_;
3154 bala_ccode_function_add_parameter (fun, _tmp8_);
3155 _bala_ccode_node_unref0 (_tmp8_)((_tmp8_ == ((void*)0)) ? ((void*)0) : (_tmp8_ = (bala_ccode_node_unref
(_tmp8_), ((void*)0))))
;
3156 _g_free0 (_tmp6_)(_tmp6_ = (g_free (_tmp6_), ((void*)0)));
3157 bala_ccode_base_module_push_function (self, fun);
3158 _tmp9_ = bala_ccode_base_module_get_ccode (self);
3159 _tmp10_ = _tmp9_;
3160 _tmp11_ = bala_ccode_constant_new ("{ 0 }");
3161 _tmp12_ = _tmp11_;
3162 _tmp13_ = bala_ccode_variable_declarator_new_zero ("zero_mutex", (BalaCCodeExpression*) _tmp12_, NULL((void*)0));
3163 _tmp14_ = _tmp13_;
3164 bala_ccode_function_add_declaration (_tmp10_, typename, (BalaCCodeDeclarator*) _tmp14_, 0);
3165 _bala_ccode_node_unref0 (_tmp14_)((_tmp14_ == ((void*)0)) ? ((void*)0) : (_tmp14_ = (bala_ccode_node_unref
(_tmp14_), ((void*)0))))
;
3166 _bala_ccode_node_unref0 (_tmp12_)((_tmp12_ == ((void*)0)) ? ((void*)0) : (_tmp12_ = (bala_ccode_node_unref
(_tmp12_), ((void*)0))))
;
3167 _tmp15_ = bala_ccode_identifier_new ("memcmp");
3168 _tmp16_ = _tmp15_;
3169 _tmp17_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp16_);
3170 _tmp18_ = _tmp17_;
3171 _bala_ccode_node_unref0 (_tmp16_)((_tmp16_ == ((void*)0)) ? ((void*)0) : (_tmp16_ = (bala_ccode_node_unref
(_tmp16_), ((void*)0))))
;
3172 cmp = _tmp18_;
3173 _tmp19_ = bala_ccode_identifier_new ("mutex");
3174 _tmp20_ = _tmp19_;
3175 bala_ccode_function_call_add_argument (cmp, (BalaCCodeExpression*) _tmp20_);
3176 _bala_ccode_node_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_node_unref
(_tmp20_), ((void*)0))))
;
3177 _tmp21_ = bala_ccode_identifier_new ("zero_mutex");
3178 _tmp22_ = _tmp21_;
3179 _tmp23_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp22_);
3180 _tmp24_ = _tmp23_;
3181 bala_ccode_function_call_add_argument (cmp, (BalaCCodeExpression*) _tmp24_);
3182 _bala_ccode_node_unref0 (_tmp24_)((_tmp24_ == ((void*)0)) ? ((void*)0) : (_tmp24_ = (bala_ccode_node_unref
(_tmp24_), ((void*)0))))
;
3183 _bala_ccode_node_unref0 (_tmp22_)((_tmp22_ == ((void*)0)) ? ((void*)0) : (_tmp22_ = (bala_ccode_node_unref
(_tmp22_), ((void*)0))))
;
3184 _tmp25_ = g_strconcat ("sizeof (", typename, NULL((void*)0));
3185 _tmp26_ = _tmp25_;
3186 _tmp27_ = g_strconcat (_tmp26_, ")", NULL((void*)0));
3187 _tmp28_ = _tmp27_;
3188 _tmp29_ = bala_ccode_identifier_new (_tmp28_);
3189 _tmp30_ = _tmp29_;
3190 bala_ccode_function_call_add_argument (cmp, (BalaCCodeExpression*) _tmp30_);
3191 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
3192 _g_free0 (_tmp28_)(_tmp28_ = (g_free (_tmp28_), ((void*)0)));
3193 _g_free0 (_tmp26_)(_tmp26_ = (g_free (_tmp26_), ((void*)0)));
3194 _tmp31_ = bala_ccode_base_module_get_ccode (self);
3195 _tmp32_ = _tmp31_;
3196 bala_ccode_function_open_if (_tmp32_, (BalaCCodeExpression*) cmp);
3197 _tmp33_ = g_strconcat (funcprefix, "_clear", NULL((void*)0));
3198 _tmp34_ = _tmp33_;
3199 _tmp35_ = bala_ccode_identifier_new (_tmp34_);
3200 _tmp36_ = _tmp35_;
3201 _tmp37_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp36_);
3202 _tmp38_ = _tmp37_;
3203 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
3204 _g_free0 (_tmp34_)(_tmp34_ = (g_free (_tmp34_), ((void*)0)));
3205 mutex_clear = _tmp38_;
3206 _tmp39_ = bala_ccode_identifier_new ("mutex");
3207 _tmp40_ = _tmp39_;
3208 bala_ccode_function_call_add_argument (mutex_clear, (BalaCCodeExpression*) _tmp40_);
3209 _bala_ccode_node_unref0 (_tmp40_)((_tmp40_ == ((void*)0)) ? ((void*)0) : (_tmp40_ = (bala_ccode_node_unref
(_tmp40_), ((void*)0))))
;
3210 _tmp41_ = bala_ccode_base_module_get_ccode (self);
3211 _tmp42_ = _tmp41_;
3212 bala_ccode_function_add_expression (_tmp42_, (BalaCCodeExpression*) mutex_clear);
3213 _tmp43_ = bala_ccode_identifier_new ("memset");
3214 _tmp44_ = _tmp43_;
3215 _tmp45_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp44_);
3216 _tmp46_ = _tmp45_;
3217 _bala_ccode_node_unref0 (_tmp44_)((_tmp44_ == ((void*)0)) ? ((void*)0) : (_tmp44_ = (bala_ccode_node_unref
(_tmp44_), ((void*)0))))
;
3218 mset = _tmp46_;
3219 _tmp47_ = bala_ccode_identifier_new ("mutex");
3220 _tmp48_ = _tmp47_;
3221 bala_ccode_function_call_add_argument (mset, (BalaCCodeExpression*) _tmp48_);
3222 _bala_ccode_node_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_ccode_node_unref
(_tmp48_), ((void*)0))))
;
3223 _tmp49_ = bala_ccode_constant_new ("0");
3224 _tmp50_ = _tmp49_;
3225 bala_ccode_function_call_add_argument (mset, (BalaCCodeExpression*) _tmp50_);
3226 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
3227 _tmp51_ = g_strconcat ("sizeof (", typename, NULL((void*)0));
3228 _tmp52_ = _tmp51_;
3229 _tmp53_ = g_strconcat (_tmp52_, ")", NULL((void*)0));
3230 _tmp54_ = _tmp53_;
3231 _tmp55_ = bala_ccode_identifier_new (_tmp54_);
3232 _tmp56_ = _tmp55_;
3233 bala_ccode_function_call_add_argument (mset, (BalaCCodeExpression*) _tmp56_);
3234 _bala_ccode_node_unref0 (_tmp56_)((_tmp56_ == ((void*)0)) ? ((void*)0) : (_tmp56_ = (bala_ccode_node_unref
(_tmp56_), ((void*)0))))
;
3235 _g_free0 (_tmp54_)(_tmp54_ = (g_free (_tmp54_), ((void*)0)));
3236 _g_free0 (_tmp52_)(_tmp52_ = (g_free (_tmp52_), ((void*)0)));
3237 _tmp57_ = bala_ccode_base_module_get_ccode (self);
3238 _tmp58_ = _tmp57_;
3239 bala_ccode_function_add_expression (_tmp58_, (BalaCCodeExpression*) mset);
3240 _tmp59_ = bala_ccode_base_module_get_ccode (self);
3241 _tmp60_ = _tmp59_;
3242 bala_ccode_function_close (_tmp60_);
3243 bala_ccode_base_module_pop_function (self);
3244 _tmp61_ = self->cfile;
3245 bala_ccode_file_add_function_declaration (_tmp61_, fun);
3246 _tmp62_ = self->cfile;
3247 bala_ccode_file_add_function (_tmp62_, fun);
3248 _bala_ccode_node_unref0 (mset)((mset == ((void*)0)) ? ((void*)0) : (mset = (bala_ccode_node_unref
(mset), ((void*)0))))
;
3249 _bala_ccode_node_unref0 (mutex_clear)((mutex_clear == ((void*)0)) ? ((void*)0) : (mutex_clear = (bala_ccode_node_unref
(mutex_clear), ((void*)0))))
;
3250 _bala_ccode_node_unref0 (cmp)((cmp == ((void*)0)) ? ((void*)0) : (cmp = (bala_ccode_node_unref
(cmp), ((void*)0))))
;
3251 _bala_ccode_node_unref0 (fun)((fun == ((void*)0)) ? ((void*)0) : (fun = (bala_ccode_node_unref
(fun), ((void*)0))))
;
3252}
3253
3254static void
3255bala_ccode_base_module_real_visit_source_file (BalaCodeVisitor* base,
3256 BalaSourceFile* source_file)
3257{
3258 BalaCCodeBaseModule * self;
3259 BalaCCodeFile* _tmp0_;
3260 GHashFunc _tmp1_;
3261 GEqualFunc _tmp2_;
3262 BalaHashSet* _tmp3_;
3263 GHashFunc _tmp4_;
3264 GEqualFunc _tmp5_;
3265 BalaHashSet* _tmp6_;
3266 GHashFunc _tmp7_;
3267 GEqualFunc _tmp8_;
3268 BalaHashSet* _tmp9_;
3269 BalaCodeContext* _tmp10_;
3270 BalaReport* _tmp11_;
3271 BalaReport* _tmp12_;
3272 BalaSourceFileType _tmp13_;
3273 BalaSourceFileType _tmp14_;
3274 BalaList* comments = NULL((void*)0);
3275 BalaList* _tmp40_;
3276 BalaList* _tmp41_;
3277 BalaList* _tmp42_;
3278 BalaCCodeFile* _tmp58_;
3279 gchar* _tmp59_;
3280 gchar* _tmp60_;
3281 const gchar* _tmp61_;
3282 const gchar* _tmp62_;
3283 BalaCodeContext* _tmp63_;
3284 gboolean _tmp64_;
3285 gboolean _tmp65_;
3286 BalaCodeContext* _tmp66_;
3287 gboolean _tmp67_;
3288 gboolean _tmp68_;
3289 gboolean _tmp69_;
3290 self = (BalaCCodeBaseModule*) base;
3291 g_return_if_fail (source_file != NULL)do { if ((source_file != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "source_file != NULL"
); return; } } while (0)
;
3292 _tmp0_ = bala_ccode_file_new (source_file);
3293 _bala_ccode_file_unref0 (self->cfile)((self->cfile == ((void*)0)) ? ((void*)0) : (self->cfile
= (bala_ccode_file_unref (self->cfile), ((void*)0))))
;
3294 self->cfile = _tmp0_;
3295 _tmp1_ = g_str_hash;
3296 _tmp2_ = g_str_equal;
3297 _tmp3_ = bala_hash_set_new (G_TYPE_STRING((GType) ((16) << (2))), (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp1_, _tmp2_);
3298 _bala_iterable_unref0 (self->user_marshal_set)((self->user_marshal_set == ((void*)0)) ? ((void*)0) : (self
->user_marshal_set = (bala_iterable_unref (self->user_marshal_set
), ((void*)0))))
;
3299 self->user_marshal_set = (BalaSet*) _tmp3_;
3300 self->next_regex_id = 0;
3301 self->requires_assert = FALSE(0);
3302 self->requires_array_free = FALSE(0);
3303 self->requires_array_move = FALSE(0);
3304 self->requires_array_length = FALSE(0);
3305 self->requires_array_n_elements = FALSE(0);
3306 self->requires_clear_mutex = FALSE(0);
3307 _tmp4_ = g_str_hash;
3308 _tmp5_ = g_str_equal;
3309 _tmp6_ = bala_hash_set_new (G_TYPE_STRING((GType) ((16) << (2))), (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp4_, _tmp5_);
3310 _bala_iterable_unref0 (self->wrappers)((self->wrappers == ((void*)0)) ? ((void*)0) : (self->wrappers
= (bala_iterable_unref (self->wrappers), ((void*)0))))
;
3311 self->wrappers = (BalaSet*) _tmp6_;
3312 _tmp7_ = g_direct_hash;
3313 _tmp8_ = g_direct_equal;
3314 _tmp9_ = bala_hash_set_new (BALA_TYPE_SYMBOL(bala_symbol_get_type ()), (GBoxedCopyFunc) bala_code_node_ref, (GDestroyNotify) bala_code_node_unref, _tmp7_, _tmp8_);
3315 _bala_iterable_unref0 (self->priv->generated_external_symbols)((self->priv->generated_external_symbols == ((void*)0))
? ((void*)0) : (self->priv->generated_external_symbols
= (bala_iterable_unref (self->priv->generated_external_symbols
), ((void*)0))))
;
3316 self->priv->generated_external_symbols = (BalaSet*) _tmp9_;
3317 bala_source_file_accept_children (source_file, (BalaCodeVisitor*) self);
3318 _tmp10_ = self->priv->_context;
3319 _tmp11_ = bala_code_context_get_report (_tmp10_);
3320 _tmp12_ = _tmp11_;
3321 if (bala_report_get_errors (_tmp12_) > 0) {
3322 return;
3323 }
3324 _tmp13_ = bala_source_file_get_file_type (source_file);
3325 _tmp14_ = _tmp13_;
3326 if (_tmp14_ == BALA_SOURCE_FILE_TYPE_FAST) {
3327 return;
3328 }
3329 if (self->requires_assert) {
3330 BalaCCodeFile* _tmp15_;
3331 BalaCCodeConstant* _tmp16_;
3332 BalaCCodeConstant* _tmp17_;
3333 BalaCCodeMacroReplacement* _tmp18_;
3334 BalaCCodeMacroReplacement* _tmp19_;
3335 BalaCCodeFile* _tmp20_;
3336 BalaCCodeConstant* _tmp21_;
3337 BalaCCodeConstant* _tmp22_;
3338 BalaCCodeMacroReplacement* _tmp23_;
3339 BalaCCodeMacroReplacement* _tmp24_;
3340 BalaCCodeFile* _tmp25_;
3341 BalaCCodeConstant* _tmp26_;
3342 BalaCCodeConstant* _tmp27_;
3343 BalaCCodeMacroReplacement* _tmp28_;
3344 BalaCCodeMacroReplacement* _tmp29_;
3345 BalaCCodeFile* _tmp30_;
3346 BalaCCodeConstant* _tmp31_;
3347 BalaCCodeConstant* _tmp32_;
3348 BalaCCodeMacroReplacement* _tmp33_;
3349 BalaCCodeMacroReplacement* _tmp34_;
3350 _tmp15_ = self->cfile;
3351 _tmp16_ = bala_ccode_constant_new ("if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FI" \
3352"LE__, __LINE__, G_STRFUNC, msg);");
3353 _tmp17_ = _tmp16_;
3354 _tmp18_ = bala_ccode_macro_replacement_new_with_expression ("_bala_assert(expr, msg)", (BalaCCodeExpression*) _tmp17_);
3355 _tmp19_ = _tmp18_;
3356 bala_ccode_file_add_type_declaration (_tmp15_, (BalaCCodeNode*) _tmp19_);
3357 _bala_ccode_node_unref0 (_tmp19_)((_tmp19_ == ((void*)0)) ? ((void*)0) : (_tmp19_ = (bala_ccode_node_unref
(_tmp19_), ((void*)0))))
;
3358 _bala_ccode_node_unref0 (_tmp17_)((_tmp17_ == ((void*)0)) ? ((void*)0) : (_tmp17_ = (bala_ccode_node_unref
(_tmp17_), ((void*)0))))
;
3359 _tmp20_ = self->cfile;
3360 _tmp21_ = bala_ccode_constant_new ("if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_" \
3361"STRFUNC, msg); return; }");
3362 _tmp22_ = _tmp21_;
3363 _tmp23_ = bala_ccode_macro_replacement_new_with_expression ("_bala_return_if_fail(expr, msg)", (BalaCCodeExpression*) _tmp22_);
3364 _tmp24_ = _tmp23_;
3365 bala_ccode_file_add_type_declaration (_tmp20_, (BalaCCodeNode*) _tmp24_);
3366 _bala_ccode_node_unref0 (_tmp24_)((_tmp24_ == ((void*)0)) ? ((void*)0) : (_tmp24_ = (bala_ccode_node_unref
(_tmp24_), ((void*)0))))
;
3367 _bala_ccode_node_unref0 (_tmp22_)((_tmp22_ == ((void*)0)) ? ((void*)0) : (_tmp22_ = (bala_ccode_node_unref
(_tmp22_), ((void*)0))))
;
3368 _tmp25_ = self->cfile;
3369 _tmp26_ = bala_ccode_constant_new ("if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_" \
3370"STRFUNC, msg); return val; }");
3371 _tmp27_ = _tmp26_;
3372 _tmp28_ = bala_ccode_macro_replacement_new_with_expression ("_bala_return_val_if_fail(expr, msg, val)", (BalaCCodeExpression*) _tmp27_);
3373 _tmp29_ = _tmp28_;
3374 bala_ccode_file_add_type_declaration (_tmp25_, (BalaCCodeNode*) _tmp29_);
3375 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
3376 _bala_ccode_node_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_ccode_node_unref
(_tmp27_), ((void*)0))))
;
3377 _tmp30_ = self->cfile;
3378 _tmp31_ = bala_ccode_constant_new ("if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LI" \
3379"NE__, G_STRFUNC, msg);");
3380 _tmp32_ = _tmp31_;
3381 _tmp33_ = bala_ccode_macro_replacement_new_with_expression ("_bala_warn_if_fail(expr, msg)", (BalaCCodeExpression*) _tmp32_);
3382 _tmp34_ = _tmp33_;
3383 bala_ccode_file_add_type_declaration (_tmp30_, (BalaCCodeNode*) _tmp34_);
3384 _bala_ccode_node_unref0 (_tmp34_)((_tmp34_ == ((void*)0)) ? ((void*)0) : (_tmp34_ = (bala_ccode_node_unref
(_tmp34_), ((void*)0))))
;
3385 _bala_ccode_node_unref0 (_tmp32_)((_tmp32_ == ((void*)0)) ? ((void*)0) : (_tmp32_ = (bala_ccode_node_unref
(_tmp32_), ((void*)0))))
;
3386 }
3387 if (self->requires_array_free) {
3388 bala_ccode_base_module_append_bala_array_free (self);
3389 }
3390 if (self->requires_array_move) {
3391 bala_ccode_base_module_append_bala_array_move (self);
3392 }
3393 if (self->requires_array_length) {
3394 bala_ccode_base_module_append_bala_array_length (self);
3395 }
3396 if (self->requires_array_n_elements) {
3397 BalaCCodeFile* _tmp35_;
3398 BalaCCodeConstant* _tmp36_;
3399 BalaCCodeConstant* _tmp37_;
3400 BalaCCodeMacroReplacement* _tmp38_;
3401 BalaCCodeMacroReplacement* _tmp39_;
3402 _tmp35_ = self->cfile;
3403 _tmp36_ = bala_ccode_constant_new ("(sizeof (arr) / sizeof ((arr)[0]))");
3404 _tmp37_ = _tmp36_;
3405 _tmp38_ = bala_ccode_macro_replacement_new_with_expression ("BALA_N_ELEMENTS(arr)", (BalaCCodeExpression*) _tmp37_);
3406 _tmp39_ = _tmp38_;
3407 bala_ccode_file_add_type_declaration (_tmp35_, (BalaCCodeNode*) _tmp39_);
3408 _bala_ccode_node_unref0 (_tmp39_)((_tmp39_ == ((void*)0)) ? ((void*)0) : (_tmp39_ = (bala_ccode_node_unref
(_tmp39_), ((void*)0))))
;
3409 _bala_ccode_node_unref0 (_tmp37_)((_tmp37_ == ((void*)0)) ? ((void*)0) : (_tmp37_ = (bala_ccode_node_unref
(_tmp37_), ((void*)0))))
;
3410 }
3411 if (self->requires_clear_mutex) {
3412 bala_ccode_base_module_append_bala_clear_mutex (self, "GMutex", "g_mutex");
3413 bala_ccode_base_module_append_bala_clear_mutex (self, "GRecMutex", "g_rec_mutex");
3414 bala_ccode_base_module_append_bala_clear_mutex (self, "GRWLock", "g_rw_lock");
3415 bala_ccode_base_module_append_bala_clear_mutex (self, "GCond", "g_cond");
3416 }
3417 _tmp40_ = bala_source_file_get_comments (source_file);
3418 _tmp41_ = _bala_iterable_ref0 (_tmp40_);
3419 comments = _tmp41_;
3420 _tmp42_ = comments;
3421 if (_tmp42_ != NULL((void*)0)) {
3422 {
3423 BalaList* _comment_list = NULL((void*)0);
3424 BalaList* _tmp43_;
3425 BalaList* _tmp44_;
3426 gint _comment_size = 0;
3427 BalaList* _tmp45_;
3428 gint _tmp46_;
3429 gint _tmp47_;
3430 gint _comment_index = 0;
3431 _tmp43_ = comments;
3432 _tmp44_ = _bala_iterable_ref0 (_tmp43_);
3433 _comment_list = _tmp44_;
3434 _tmp45_ = _comment_list;
3435 _tmp46_ = bala_collection_get_size ((BalaCollection*) _tmp45_);
3436 _tmp47_ = _tmp46_;
3437 _comment_size = _tmp47_;
3438 _comment_index = -1;
3439 while (TRUE(!(0))) {
3440 gint _tmp48_;
3441 gint _tmp49_;
3442 BalaComment* comment = NULL((void*)0);
3443 BalaList* _tmp50_;
3444 gpointer _tmp51_;
3445 BalaCCodeComment* ccomment = NULL((void*)0);
3446 BalaComment* _tmp52_;
3447 const gchar* _tmp53_;
3448 const gchar* _tmp54_;
3449 BalaCCodeComment* _tmp55_;
3450 BalaCCodeFile* _tmp56_;
3451 BalaCCodeComment* _tmp57_;
3452 _comment_index = _comment_index + 1;
3453 _tmp48_ = _comment_index;
3454 _tmp49_ = _comment_size;
3455 if (!(_tmp48_ < _tmp49_)) {
3456 break;
3457 }
3458 _tmp50_ = _comment_list;
3459 _tmp51_ = bala_list_get (_tmp50_, _comment_index);
3460 comment = (BalaComment*) _tmp51_;
3461 _tmp52_ = comment;
3462 _tmp53_ = bala_comment_get_content (_tmp52_);
3463 _tmp54_ = _tmp53_;
3464 _tmp55_ = bala_ccode_comment_new (_tmp54_);
3465 ccomment = _tmp55_;
3466 _tmp56_ = self->cfile;
3467 _tmp57_ = ccomment;
3468 bala_ccode_file_add_comment (_tmp56_, _tmp57_);
3469 _bala_ccode_node_unref0 (ccomment)((ccomment == ((void*)0)) ? ((void*)0) : (ccomment = (bala_ccode_node_unref
(ccomment), ((void*)0))))
;
3470 _bala_comment_unref0 (comment)((comment == ((void*)0)) ? ((void*)0) : (comment = (bala_comment_unref
(comment), ((void*)0))))
;
3471 }
3472 _bala_iterable_unref0 (_comment_list)((_comment_list == ((void*)0)) ? ((void*)0) : (_comment_list =
(bala_iterable_unref (_comment_list), ((void*)0))))
;
3473 }
3474 }
3475 _tmp58_ = self->cfile;
3476 _tmp59_ = bala_source_file_get_csource_filename (source_file);
3477 _tmp60_ = _tmp59_;
3478 _tmp61_ = bala_source_file_get_filename (source_file);
3479 _tmp62_ = _tmp61_;
3480 _tmp63_ = self->priv->_context;
3481 _tmp64_ = bala_code_context_get_version_header (_tmp63_);
3482 _tmp65_ = _tmp64_;
3483 _tmp66_ = self->priv->_context;
3484 _tmp67_ = bala_code_context_get_debug (_tmp66_);
3485 _tmp68_ = _tmp67_;
3486 _tmp69_ = !bala_ccode_file_store (_tmp58_, _tmp60_, _tmp62_, _tmp65_, _tmp68_, NULL((void*)0), NULL((void*)0));
3487 _g_free0 (_tmp60_)(_tmp60_ = (g_free (_tmp60_), ((void*)0)));
3488 if (_tmp69_) {
3489 gchar* _tmp70_;
3490 gchar* _tmp71_;
3491 gchar* _tmp72_;
3492 gchar* _tmp73_;
3493 _tmp70_ = bala_source_file_get_csource_filename (source_file);
3494 _tmp71_ = _tmp70_;
3495 _tmp72_ = g_strdup_printf ("unable to open `%s' for writing", _tmp71_);
3496 _tmp73_ = _tmp72_;
3497 bala_report_error (NULL((void*)0), _tmp73_);
3498 _g_free0 (_tmp73_)(_tmp73_ = (g_free (_tmp73_), ((void*)0)));
3499 _g_free0 (_tmp71_)(_tmp71_ = (g_free (_tmp71_), ((void*)0)));
3500 }
3501 _bala_ccode_file_unref0 (self->cfile)((self->cfile == ((void*)0)) ? ((void*)0) : (self->cfile
= (bala_ccode_file_unref (self->cfile), ((void*)0))))
;
3502 self->cfile = NULL((void*)0);
3503 _bala_iterable_unref0 (comments)((comments == ((void*)0)) ? ((void*)0) : (comments = (bala_iterable_unref
(comments), ((void*)0))))
;
3504}
3505
3506static gpointer
3507_bala_ccode_file_ref0 (gpointer self)
3508{
3509 return self ? bala_ccode_file_ref (self) : NULL((void*)0);
3510}
3511
3512static gboolean
3513bala_ccode_base_module_real_generate_enum_declaration (BalaCCodeBaseModule* self,
3514 BalaEnum* en,
3515 BalaCCodeFile* decl_space)
3516{
3517 gchar* _tmp0_;
3518 gchar* _tmp1_;
3519 gboolean _tmp2_;
3520 BalaCCodeEnum* cenum = NULL((void*)0);
3521 gchar* _tmp3_;
3522 gchar* _tmp4_;
3523 BalaCCodeEnum* _tmp5_;
3524 BalaCCodeEnum* _tmp6_;
3525 BalaVersionAttribute* _tmp7_;
3526 BalaVersionAttribute* _tmp8_;
3527 gboolean _tmp9_;
3528 gboolean _tmp10_;
3529 BalaCCodeFile* current_cfile = NULL((void*)0);
3530 BalaCCodeFile* _tmp18_;
3531 BalaCCodeFile* _tmp19_;
3532 BalaCCodeFile* _tmp20_;
3533 gint flag_shift = 0;
3534 BalaCCodeFile* _tmp67_;
3535 BalaCCodeFile* _tmp68_;
3536 BalaCCodeEnum* _tmp69_;
3537 BalaCCodeNewline* _tmp70_;
3538 BalaCCodeNewline* _tmp71_;
3539 gboolean _tmp72_ = FALSE(0);
3540 BalaCodeContext* _tmp73_;
3541 BalaProfile _tmp74_;
3542 BalaProfile _tmp75_;
3543 BalaCCodeNewline* _tmp76_;
3544 BalaCCodeNewline* _tmp77_;
3545 gchar* fun_name = NULL((void*)0);
3546 gchar* _tmp78_;
3547 gchar* macro = NULL((void*)0);
3548 const gchar* _tmp79_;
3549 gchar* _tmp80_;
3550 gchar* _tmp81_;
3551 gchar* _tmp82_;
3552 const gchar* _tmp83_;
3553 BalaCCodeMacroReplacement* _tmp84_;
3554 BalaCCodeMacroReplacement* _tmp85_;
3555 BalaCCodeFunction* regfun = NULL((void*)0);
3556 const gchar* _tmp86_;
3557 BalaCCodeFunction* _tmp87_;
3558 BalaCCodeFunction* _tmp88_;
3559 BalaCCodeFunction* _tmp101_;
3560 gboolean result = FALSE(0);
3561 g_return_val_if_fail (en != NULL, FALSE)do { if ((en != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "en != NULL");
return ((0)); } } while (0)
;
3562 g_return_val_if_fail (decl_space != NULL, FALSE)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return ((0)); } } while (0)
;
3563 _tmp0_ = bala_get_ccode_name ((BalaCodeNode*) en);
3564 _tmp1_ = _tmp0_;
3565 _tmp2_ = bala_ccode_base_module_add_symbol_declaration (self, decl_space, (BalaSymbol*) en, _tmp1_);
3566 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
3567 if (_tmp2_) {
3568 result = FALSE(0);
3569 return result;
3570 }
3571 _tmp3_ = bala_get_ccode_name ((BalaCodeNode*) en);
3572 _tmp4_ = _tmp3_;
3573 _tmp5_ = bala_ccode_enum_new (_tmp4_);
3574 _tmp6_ = _tmp5_;
3575 _g_free0 (_tmp4_)(_tmp4_ = (g_free (_tmp4_), ((void*)0)));
3576 cenum = _tmp6_;
3577 _tmp7_ = bala_symbol_get_version ((BalaSymbol*) en);
3578 _tmp8_ = _tmp7_;
3579 _tmp9_ = bala_version_attribute_get_deprecated (_tmp8_);
3580 _tmp10_ = _tmp9_;
3581 if (_tmp10_) {
3582 BalaCodeContext* _tmp11_;
3583 BalaProfile _tmp12_;
3584 BalaProfile _tmp13_;
3585 BalaCCodeEnum* _tmp14_;
3586 BalaCCodeEnum* _tmp15_;
3587 BalaCCodeModifiers _tmp16_;
3588 BalaCCodeModifiers _tmp17_;
3589 _tmp11_ = self->priv->_context;
3590 _tmp12_ = bala_code_context_get_profile (_tmp11_);
3591 _tmp13_ = _tmp12_;
3592 if (_tmp13_ == BALA_PROFILE_GOBJECT) {
3593 bala_ccode_file_add_include (decl_space, "glib.h", FALSE(0));
3594 }
3595 _tmp14_ = cenum;
3596 _tmp15_ = cenum;
3597 _tmp16_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp15_);
3598 _tmp17_ = _tmp16_;
3599 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp15_, _tmp17_ | BALA_CCODE_MODIFIERS_DEPRECATED);
3600 }
3601 _tmp18_ = self->cfile;
3602 _tmp19_ = _bala_ccode_file_ref0 (_tmp18_);
3603 current_cfile = _tmp19_;
3604 _tmp20_ = _bala_ccode_file_ref0 (decl_space);
3605 _bala_ccode_file_unref0 (self->cfile)((self->cfile == ((void*)0)) ? ((void*)0) : (self->cfile
= (bala_ccode_file_unref (self->cfile), ((void*)0))))
;
3606 self->cfile = _tmp20_;
3607 flag_shift = 0;
3608 {
3609 BalaList* _ev_list = NULL((void*)0);
3610 BalaList* _tmp21_;
3611 BalaList* _tmp22_;
3612 gint _ev_size = 0;
3613 BalaList* _tmp23_;
3614 gint _tmp24_;
3615 gint _tmp25_;
3616 gint _ev_index = 0;
3617 _tmp21_ = bala_enum_get_values (en);
3618 _tmp22_ = _bala_iterable_ref0 (_tmp21_);
3619 _ev_list = _tmp22_;
3620 _tmp23_ = _ev_list;
3621 _tmp24_ = bala_collection_get_size ((BalaCollection*) _tmp23_);
3622 _tmp25_ = _tmp24_;
3623 _ev_size = _tmp25_;
3624 _ev_index = -1;
3625 while (TRUE(!(0))) {
3626 gint _tmp26_;
3627 gint _tmp27_;
3628 BalaEnumValue* ev = NULL((void*)0);
3629 BalaList* _tmp28_;
3630 gpointer _tmp29_;
3631 BalaCCodeEnumValue* c_ev = NULL((void*)0);
3632 BalaEnumValue* _tmp30_;
3633 BalaExpression* _tmp31_;
3634 BalaExpression* _tmp32_;
3635 BalaCCodeModifiers _tmp55_ = 0U;
3636 BalaEnumValue* _tmp56_;
3637 BalaVersionAttribute* _tmp57_;
3638 BalaVersionAttribute* _tmp58_;
3639 gboolean _tmp59_;
3640 gboolean _tmp60_;
3641 BalaCCodeEnumValue* _tmp61_;
3642 BalaCCodeEnumValue* _tmp62_;
3643 BalaCCodeModifiers _tmp63_;
3644 BalaCCodeModifiers _tmp64_;
3645 BalaCCodeEnum* _tmp65_;
3646 BalaCCodeEnumValue* _tmp66_;
3647 _ev_index = _ev_index + 1;
3648 _tmp26_ = _ev_index;
3649 _tmp27_ = _ev_size;
3650 if (!(_tmp26_ < _tmp27_)) {
3651 break;
3652 }
3653 _tmp28_ = _ev_list;
3654 _tmp29_ = bala_list_get (_tmp28_, _ev_index);
3655 ev = (BalaEnumValue*) _tmp29_;
3656 _tmp30_ = ev;
3657 _tmp31_ = bala_constant_get_value ((BalaConstant*) _tmp30_);
3658 _tmp32_ = _tmp31_;
3659 if (_tmp32_ == NULL((void*)0)) {
3660 BalaEnumValue* _tmp33_;
3661 gchar* _tmp34_;
3662 gchar* _tmp35_;
3663 BalaCCodeEnumValue* _tmp36_;
3664 gboolean _tmp37_;
3665 gboolean _tmp38_;
3666 _tmp33_ = ev;
3667 _tmp34_ = bala_get_ccode_name ((BalaCodeNode*) _tmp33_);
3668 _tmp35_ = _tmp34_;
3669 _tmp36_ = bala_ccode_enum_value_new (_tmp35_, NULL((void*)0));
3670 _bala_ccode_node_unref0 (c_ev)((c_ev == ((void*)0)) ? ((void*)0) : (c_ev = (bala_ccode_node_unref
(c_ev), ((void*)0))))
;
3671 c_ev = _tmp36_;
3672 _g_free0 (_tmp35_)(_tmp35_ = (g_free (_tmp35_), ((void*)0)));
3673 _tmp37_ = bala_enum_get_is_flags (en);
3674 _tmp38_ = _tmp37_;
3675 if (_tmp38_) {
3676 BalaCCodeEnumValue* _tmp39_;
3677 gchar* _tmp40_;
3678 gchar* _tmp41_;
3679 BalaCCodeConstant* _tmp42_;
3680 BalaCCodeConstant* _tmp43_;
3681 _tmp39_ = c_ev;
3682 _tmp40_ = g_strdup_printf ("1 << %d", flag_shift);
3683 _tmp41_ = _tmp40_;
3684 _tmp42_ = bala_ccode_constant_new (_tmp41_);
3685 _tmp43_ = _tmp42_;
3686 bala_ccode_enum_value_set_value (_tmp39_, (BalaCCodeExpression*) _tmp43_);
3687 _bala_ccode_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_ccode_node_unref
(_tmp43_), ((void*)0))))
;
3688 _g_free0 (_tmp41_)(_tmp41_ = (g_free (_tmp41_), ((void*)0)));
3689 flag_shift += 1;
3690 }
3691 } else {
3692 BalaEnumValue* _tmp44_;
3693 BalaExpression* _tmp45_;
3694 BalaExpression* _tmp46_;
3695 BalaEnumValue* _tmp47_;
3696 gchar* _tmp48_;
3697 gchar* _tmp49_;
3698 BalaEnumValue* _tmp50_;
3699 BalaExpression* _tmp51_;
3700 BalaExpression* _tmp52_;
3701 BalaCCodeExpression* _tmp53_;
3702 BalaCCodeEnumValue* _tmp54_;
3703 _tmp44_ = ev;
3704 _tmp45_ = bala_constant_get_value ((BalaConstant*) _tmp44_);
3705 _tmp46_ = _tmp45_;
3706 bala_code_node_emit ((BalaCodeNode*) _tmp46_, (BalaCodeGenerator*) self);
3707 _tmp47_ = ev;
3708 _tmp48_ = bala_get_ccode_name ((BalaCodeNode*) _tmp47_);
3709 _tmp49_ = _tmp48_;
3710 _tmp50_ = ev;
3711 _tmp51_ = bala_constant_get_value ((BalaConstant*) _tmp50_);
3712 _tmp52_ = _tmp51_;
3713 _tmp53_ = bala_get_cvalue (_tmp52_);
3714 _tmp54_ = bala_ccode_enum_value_new (_tmp49_, _tmp53_);
3715 _bala_ccode_node_unref0 (c_ev)((c_ev == ((void*)0)) ? ((void*)0) : (c_ev = (bala_ccode_node_unref
(c_ev), ((void*)0))))
;
3716 c_ev = _tmp54_;
3717 _g_free0 (_tmp49_)(_tmp49_ = (g_free (_tmp49_), ((void*)0)));
3718 }
3719 _tmp56_ = ev;
3720 _tmp57_ = bala_symbol_get_version ((BalaSymbol*) _tmp56_);
3721 _tmp58_ = _tmp57_;
3722 _tmp59_ = bala_version_attribute_get_deprecated (_tmp58_);
3723 _tmp60_ = _tmp59_;
3724 if (_tmp60_) {
3725 _tmp55_ = BALA_CCODE_MODIFIERS_DEPRECATED;
3726 } else {
3727 _tmp55_ = 0;
3728 }
3729 _tmp61_ = c_ev;
3730 _tmp62_ = c_ev;
3731 _tmp63_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp62_);
3732 _tmp64_ = _tmp63_;
3733 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp62_, _tmp64_ | _tmp55_);
3734 _tmp65_ = cenum;
3735 _tmp66_ = c_ev;
3736 bala_ccode_enum_add_value (_tmp65_, _tmp66_);
3737 _bala_ccode_node_unref0 (c_ev)((c_ev == ((void*)0)) ? ((void*)0) : (c_ev = (bala_ccode_node_unref
(c_ev), ((void*)0))))
;
3738 _bala_code_node_unref0 (ev)((ev == ((void*)0)) ? ((void*)0) : (ev = (bala_code_node_unref
(ev), ((void*)0))))
;
3739 }
3740 _bala_iterable_unref0 (_ev_list)((_ev_list == ((void*)0)) ? ((void*)0) : (_ev_list = (bala_iterable_unref
(_ev_list), ((void*)0))))
;
3741 }
3742 _tmp67_ = current_cfile;
3743 _tmp68_ = _bala_ccode_file_ref0 (_tmp67_);
3744 _bala_ccode_file_unref0 (self->cfile)((self->cfile == ((void*)0)) ? ((void*)0) : (self->cfile
= (bala_ccode_file_unref (self->cfile), ((void*)0))))
;
3745 self->cfile = _tmp68_;
3746 _tmp69_ = cenum;
3747 bala_ccode_file_add_type_declaration (decl_space, (BalaCCodeNode*) _tmp69_);
3748 _tmp70_ = bala_ccode_newline_new ();
3749 _tmp71_ = _tmp70_;
3750 bala_ccode_file_add_type_declaration (decl_space, (BalaCCodeNode*) _tmp71_);
3751 _bala_ccode_node_unref0 (_tmp71_)((_tmp71_ == ((void*)0)) ? ((void*)0) : (_tmp71_ = (bala_ccode_node_unref
(_tmp71_), ((void*)0))))
;
3752 _tmp73_ = self->priv->_context;
3753 _tmp74_ = bala_code_context_get_profile (_tmp73_);
3754 _tmp75_ = _tmp74_;
3755 if (_tmp75_ != BALA_PROFILE_GOBJECT) {
3756 _tmp72_ = TRUE(!(0));
3757 } else {
3758 _tmp72_ = !bala_get_ccode_has_type_id ((BalaTypeSymbol*) en);
3759 }
3760 if (_tmp72_) {
3761 result = TRUE(!(0));
3762 _bala_ccode_file_unref0 (current_cfile)((current_cfile == ((void*)0)) ? ((void*)0) : (current_cfile =
(bala_ccode_file_unref (current_cfile), ((void*)0))))
;
3763 _bala_ccode_node_unref0 (cenum)((cenum == ((void*)0)) ? ((void*)0) : (cenum = (bala_ccode_node_unref
(cenum), ((void*)0))))
;
3764 return result;
3765 }
3766 bala_ccode_file_add_include (decl_space, "glib-object.h", FALSE(0));
3767 _tmp76_ = bala_ccode_newline_new ();
3768 _tmp77_ = _tmp76_;
3769 bala_ccode_file_add_type_declaration (decl_space, (BalaCCodeNode*) _tmp77_);
3770 _bala_ccode_node_unref0 (_tmp77_)((_tmp77_ == ((void*)0)) ? ((void*)0) : (_tmp77_ = (bala_ccode_node_unref
(_tmp77_), ((void*)0))))
;
3771 _tmp78_ = bala_get_ccode_type_function ((BalaTypeSymbol*) en);
3772 fun_name = _tmp78_;
3773 _tmp79_ = fun_name;
3774 _tmp80_ = g_strdup_printf ("(%s ())", _tmp79_);
3775 macro = _tmp80_;
3776 _tmp81_ = bala_get_ccode_type_id ((BalaCodeNode*) en);
3777 _tmp82_ = _tmp81_;
3778 _tmp83_ = macro;
3779 _tmp84_ = bala_ccode_macro_replacement_new (_tmp82_, _tmp83_);
3780 _tmp85_ = _tmp84_;
3781 bala_ccode_file_add_type_declaration (decl_space, (BalaCCodeNode*) _tmp85_);
3782 _bala_ccode_node_unref0 (_tmp85_)((_tmp85_ == ((void*)0)) ? ((void*)0) : (_tmp85_ = (bala_ccode_node_unref
(_tmp85_), ((void*)0))))
;
3783 _g_free0 (_tmp82_)(_tmp82_ = (g_free (_tmp82_), ((void*)0)));
3784 _tmp86_ = fun_name;
3785 _tmp87_ = bala_ccode_function_new (_tmp86_, "GType");
3786 regfun = _tmp87_;
3787 _tmp88_ = regfun;
3788 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp88_, BALA_CCODE_MODIFIERS_CONST);
3789 if (bala_symbol_is_private_symbol ((BalaSymbol*) en)) {
3790 BalaCCodeFunction* _tmp89_;
3791 BalaCCodeFunction* _tmp90_;
3792 BalaCCodeModifiers _tmp91_;
3793 BalaCCodeModifiers _tmp92_;
3794 _tmp89_ = regfun;
3795 _tmp90_ = regfun;
3796 _tmp91_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp90_);
3797 _tmp92_ = _tmp91_;
3798 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp90_, _tmp92_ | (BALA_CCODE_MODIFIERS_STATIC | BALA_CCODE_MODIFIERS_UNUSED));
3799 } else {
3800 gboolean _tmp93_ = FALSE(0);
3801 BalaCodeContext* _tmp94_;
3802 gboolean _tmp95_;
3803 gboolean _tmp96_;
3804 _tmp94_ = self->priv->_context;
3805 _tmp95_ = bala_code_context_get_hide_internal (_tmp94_);
3806 _tmp96_ = _tmp95_;
3807 if (_tmp96_) {
3808 _tmp93_ = bala_symbol_is_internal_symbol ((BalaSymbol*) en);
3809 } else {
3810 _tmp93_ = FALSE(0);
3811 }
3812 if (_tmp93_) {
3813 BalaCCodeFunction* _tmp97_;
3814 BalaCCodeFunction* _tmp98_;
3815 BalaCCodeModifiers _tmp99_;
3816 BalaCCodeModifiers _tmp100_;
3817 _tmp97_ = regfun;
3818 _tmp98_ = regfun;
3819 _tmp99_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp98_);
3820 _tmp100_ = _tmp99_;
3821 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp98_, _tmp100_ | BALA_CCODE_MODIFIERS_INTERNAL);
3822 }
3823 }
3824 _tmp101_ = regfun;
3825 bala_ccode_file_add_function_declaration (decl_space, _tmp101_);
3826 result = TRUE(!(0));
3827 _bala_ccode_node_unref0 (regfun)((regfun == ((void*)0)) ? ((void*)0) : (regfun = (bala_ccode_node_unref
(regfun), ((void*)0))))
;
3828 _g_free0 (macro)(macro = (g_free (macro), ((void*)0)));
3829 _g_free0 (fun_name)(fun_name = (g_free (fun_name), ((void*)0)));
3830 _bala_ccode_file_unref0 (current_cfile)((current_cfile == ((void*)0)) ? ((void*)0) : (current_cfile =
(bala_ccode_file_unref (current_cfile), ((void*)0))))
;
3831 _bala_ccode_node_unref0 (cenum)((cenum == ((void*)0)) ? ((void*)0) : (cenum = (bala_ccode_node_unref
(cenum), ((void*)0))))
;
3832 return result;
3833}
3834
3835gboolean
3836bala_ccode_base_module_generate_enum_declaration (BalaCCodeBaseModule* self,
3837 BalaEnum* en,
3838 BalaCCodeFile* decl_space)
3839{
3840 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
3841 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_enum_declaration (self, en, decl_space);
3842}
3843
3844static void
3845bala_ccode_base_module_real_visit_enum (BalaCodeVisitor* base,
3846 BalaEnum* en)
3847{
3848 BalaCCodeBaseModule * self;
3849 BalaSourceReference* _tmp0_;
3850 BalaSourceReference* _tmp1_;
3851 BalaComment* _tmp2_;
3852 BalaComment* _tmp3_;
3853 BalaCCodeFile* _tmp11_;
3854 self = (BalaCCodeBaseModule*) base;
3855 g_return_if_fail (en != NULL)do { if ((en != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "en != NULL");
return; } } while (0)
;
3856 _tmp0_ = bala_code_node_get_source_reference ((BalaCodeNode*) en);
3857 _tmp1_ = _tmp0_;
3858 bala_ccode_base_module_push_line (self, _tmp1_);
3859 _tmp2_ = bala_symbol_get_comment ((BalaSymbol*) en);
3860 _tmp3_ = _tmp2_;
3861 if (_tmp3_ != NULL((void*)0)) {
3862 BalaCCodeFile* _tmp4_;
3863 BalaComment* _tmp5_;
3864 BalaComment* _tmp6_;
3865 const gchar* _tmp7_;
3866 const gchar* _tmp8_;
3867 BalaCCodeComment* _tmp9_;
3868 BalaCCodeComment* _tmp10_;
3869 _tmp4_ = self->cfile;
3870 _tmp5_ = bala_symbol_get_comment ((BalaSymbol*) en);
3871 _tmp6_ = _tmp5_;
3872 _tmp7_ = bala_comment_get_content (_tmp6_);
3873 _tmp8_ = _tmp7_;
3874 _tmp9_ = bala_ccode_comment_new (_tmp8_);
3875 _tmp10_ = _tmp9_;
3876 bala_ccode_file_add_type_member_definition (_tmp4_, (BalaCCodeNode*) _tmp10_);
3877 _bala_ccode_node_unref0 (_tmp10_)((_tmp10_ == ((void*)0)) ? ((void*)0) : (_tmp10_ = (bala_ccode_node_unref
(_tmp10_), ((void*)0))))
;
3878 }
3879 _tmp11_ = self->cfile;
3880 bala_ccode_base_module_generate_enum_declaration (self, en, _tmp11_);
3881 if (!bala_symbol_is_internal_symbol ((BalaSymbol*) en)) {
3882 BalaCCodeFile* _tmp12_;
3883 _tmp12_ = self->header_file;
3884 bala_ccode_base_module_generate_enum_declaration (self, en, _tmp12_);
3885 }
3886 if (!bala_symbol_is_private_symbol ((BalaSymbol*) en)) {
3887 BalaCCodeFile* _tmp13_;
3888 _tmp13_ = self->internal_header_file;
3889 bala_ccode_base_module_generate_enum_declaration (self, en, _tmp13_);
3890 }
3891 bala_code_node_accept_children ((BalaCodeNode*) en, (BalaCodeVisitor*) self);
3892 bala_ccode_base_module_pop_line (self);
3893}
3894
3895void
3896bala_ccode_base_module_visit_member (BalaCCodeBaseModule* self,
3897 BalaSymbol* m)
3898{
3899 gboolean _tmp0_ = FALSE(0);
3900 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
3901 g_return_if_fail (m != NULL)do { if ((m != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "m != NULL"); return
; } } while (0)
;
3902 if (G_TYPE_CHECK_INSTANCE_TYPE (m, BALA_TYPE_LOCKABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
m); GType __t = ((bala_lockable_get_type ())); gboolean __r; if
(!__inst) __r = (0); else if (__inst->g_class && __inst
->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a
(__inst, __t); __r; })))
) {
3903 gboolean _tmp1_;
3904 gboolean _tmp2_;
3905 _tmp1_ = bala_lockable_get_lock_used (G_TYPE_CHECK_INSTANCE_CAST (m, BALA_TYPE_LOCKABLE, BalaLockable)(((BalaLockable*) g_type_check_instance_cast ((GTypeInstance*
) (m), ((bala_lockable_get_type ())))))
);
3906 _tmp2_ = _tmp1_;
3907 _tmp0_ = _tmp2_;
3908 } else {
3909 _tmp0_ = FALSE(0);
3910 }
3911 if (_tmp0_) {
3912 BalaCCodeExpression* l = NULL((void*)0);
3913 BalaCCodeIdentifier* _tmp3_;
3914 BalaCCodeBaseModuleEmitContext* init_context = NULL((void*)0);
3915 BalaCCodeBaseModuleEmitContext* _tmp4_;
3916 BalaCCodeBaseModuleEmitContext* _tmp5_;
3917 BalaCCodeBaseModuleEmitContext* finalize_context = NULL((void*)0);
3918 BalaCCodeBaseModuleEmitContext* _tmp6_;
3919 BalaCCodeBaseModuleEmitContext* _tmp7_;
3920 BalaCCodeBaseModuleEmitContext* _tmp48_;
3921 BalaCCodeFunctionCall* initf = NULL((void*)0);
3922 BalaStruct* _tmp49_;
3923 BalaCreationMethod* _tmp50_;
3924 BalaCreationMethod* _tmp51_;
3925 gchar* _tmp52_;
3926 gchar* _tmp53_;
3927 BalaCCodeIdentifier* _tmp54_;
3928 BalaCCodeIdentifier* _tmp55_;
3929 BalaCCodeFunctionCall* _tmp56_;
3930 BalaCCodeFunctionCall* _tmp57_;
3931 BalaCCodeFunctionCall* _tmp58_;
3932 BalaCCodeExpression* _tmp59_;
3933 BalaCCodeUnaryExpression* _tmp60_;
3934 BalaCCodeUnaryExpression* _tmp61_;
3935 BalaCCodeFunction* _tmp62_;
3936 BalaCCodeFunction* _tmp63_;
3937 BalaCCodeFunctionCall* _tmp64_;
3938 BalaCCodeBaseModuleEmitContext* _tmp65_;
3939 _tmp3_ = bala_ccode_identifier_new ("self");
3940 l = (BalaCCodeExpression*) _tmp3_;
3941 _tmp4_ = self->class_init_context;
3942 _tmp5_ = _bala_ccode_base_module_emit_context_ref0 (_tmp4_);
3943 init_context = _tmp5_;
3944 _tmp6_ = self->class_finalize_context;
3945 _tmp7_ = _bala_ccode_base_module_emit_context_ref0 (_tmp6_);
3946 finalize_context = _tmp7_;
3947 if (bala_symbol_is_instance_member (m)) {
3948 BalaCCodeExpression* _tmp8_;
3949 BalaCCodeMemberAccess* _tmp9_;
3950 BalaCCodeMemberAccess* _tmp10_;
3951 gchar* _tmp11_;
3952 gchar* _tmp12_;
3953 gchar* _tmp13_;
3954 gchar* _tmp14_;
3955 BalaCCodeMemberAccess* _tmp15_;
3956 BalaCCodeBaseModuleEmitContext* _tmp16_;
3957 BalaCCodeBaseModuleEmitContext* _tmp17_;
3958 BalaCCodeBaseModuleEmitContext* _tmp18_;
3959 BalaCCodeBaseModuleEmitContext* _tmp19_;
3960 _tmp8_ = l;
3961 _tmp9_ = bala_ccode_member_access_new_pointer (_tmp8_, "priv");
3962 _tmp10_ = _tmp9_;
3963 _tmp11_ = bala_get_ccode_name ((BalaCodeNode*) m);
3964 _tmp12_ = _tmp11_;
3965 _tmp13_ = bala_ccode_base_module_get_symbol_lock_name (self, _tmp12_);
3966 _tmp14_ = _tmp13_;
3967 _tmp15_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp10_, _tmp14_);
3968 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
3969 l = (BalaCCodeExpression*) _tmp15_;
3970 _g_free0 (_tmp14_)(_tmp14_ = (g_free (_tmp14_), ((void*)0)));
3971 _g_free0 (_tmp12_)(_tmp12_ = (g_free (_tmp12_), ((void*)0)));
3972 _bala_ccode_node_unref0 (_tmp10_)((_tmp10_ == ((void*)0)) ? ((void*)0) : (_tmp10_ = (bala_ccode_node_unref
(_tmp10_), ((void*)0))))
;
3973 _tmp16_ = self->instance_init_context;
3974 _tmp17_ = _bala_ccode_base_module_emit_context_ref0 (_tmp16_);
3975 _bala_ccode_base_module_emit_context_unref0 (init_context)((init_context == ((void*)0)) ? ((void*)0) : (init_context = (
bala_ccode_base_module_emit_context_unref (init_context), ((void
*)0))))
;
3976 init_context = _tmp17_;
3977 _tmp18_ = self->instance_finalize_context;
3978 _tmp19_ = _bala_ccode_base_module_emit_context_ref0 (_tmp18_);
3979 _bala_ccode_base_module_emit_context_unref0 (finalize_context)((finalize_context == ((void*)0)) ? ((void*)0) : (finalize_context
= (bala_ccode_base_module_emit_context_unref (finalize_context
), ((void*)0))))
;
3980 finalize_context = _tmp19_;
3981 } else {
3982 if (bala_symbol_is_class_member (m)) {
3983 BalaCCodeFunctionCall* get_class_private_call = NULL((void*)0);
3984 BalaSymbol* _tmp20_;
3985 BalaSymbol* _tmp21_;
3986 gchar* _tmp22_;
3987 gchar* _tmp23_;
3988 BalaCCodeIdentifier* _tmp24_;
3989 BalaCCodeIdentifier* _tmp25_;
3990 BalaCCodeFunctionCall* _tmp26_;
3991 BalaCCodeFunctionCall* _tmp27_;
3992 BalaCCodeFunctionCall* _tmp28_;
3993 BalaCCodeIdentifier* _tmp29_;
3994 BalaCCodeIdentifier* _tmp30_;
3995 BalaCCodeFunctionCall* _tmp31_;
3996 gchar* _tmp32_;
3997 gchar* _tmp33_;
3998 gchar* _tmp34_;
3999 gchar* _tmp35_;
4000 BalaCCodeMemberAccess* _tmp36_;
4001 _tmp20_ = bala_symbol_get_parent_symbol (m);
4002 _tmp21_ = _tmp20_;
4003 _tmp22_ = bala_get_ccode_class_get_private_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp21_), ((bala_class_get_type ())))))
);
4004 _tmp23_ = _tmp22_;
4005 _tmp24_ = bala_ccode_identifier_new (_tmp23_);
4006 _tmp25_ = _tmp24_;
4007 _tmp26_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp25_);
4008 _tmp27_ = _tmp26_;
4009 _bala_ccode_node_unref0 (_tmp25_)((_tmp25_ == ((void*)0)) ? ((void*)0) : (_tmp25_ = (bala_ccode_node_unref
(_tmp25_), ((void*)0))))
;
4010 _g_free0 (_tmp23_)(_tmp23_ = (g_free (_tmp23_), ((void*)0)));
4011 get_class_private_call = _tmp27_;
4012 _tmp28_ = get_class_private_call;
4013 _tmp29_ = bala_ccode_identifier_new ("klass");
4014 _tmp30_ = _tmp29_;
4015 bala_ccode_function_call_add_argument (_tmp28_, (BalaCCodeExpression*) _tmp30_);
4016 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
4017 _tmp31_ = get_class_private_call;
4018 _tmp32_ = bala_get_ccode_name ((BalaCodeNode*) m);
4019 _tmp33_ = _tmp32_;
4020 _tmp34_ = bala_ccode_base_module_get_symbol_lock_name (self, _tmp33_);
4021 _tmp35_ = _tmp34_;
4022 _tmp36_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp31_, _tmp35_);
4023 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
4024 l = (BalaCCodeExpression*) _tmp36_;
4025 _g_free0 (_tmp35_)(_tmp35_ = (g_free (_tmp35_), ((void*)0)));
4026 _g_free0 (_tmp33_)(_tmp33_ = (g_free (_tmp33_), ((void*)0)));
4027 _bala_ccode_node_unref0 (get_class_private_call)((get_class_private_call == ((void*)0)) ? ((void*)0) : (get_class_private_call
= (bala_ccode_node_unref (get_class_private_call), ((void*)0
))))
;
4028 } else {
4029 BalaSymbol* _tmp37_;
4030 BalaSymbol* _tmp38_;
4031 gchar* _tmp39_;
4032 gchar* _tmp40_;
4033 gchar* _tmp41_;
4034 gchar* _tmp42_;
4035 gchar* _tmp43_;
4036 gchar* _tmp44_;
4037 gchar* _tmp45_;
4038 gchar* _tmp46_;
4039 BalaCCodeIdentifier* _tmp47_;
4040 _tmp37_ = bala_symbol_get_parent_symbol (m);
4041 _tmp38_ = _tmp37_;
4042 _tmp39_ = bala_get_ccode_lower_case_name ((BalaCodeNode*) _tmp38_, NULL((void*)0));
4043 _tmp40_ = _tmp39_;
4044 _tmp41_ = bala_get_ccode_name ((BalaCodeNode*) m);
4045 _tmp42_ = _tmp41_;
4046 _tmp43_ = g_strdup_printf ("%s_%s", _tmp40_, _tmp42_);
4047 _tmp44_ = _tmp43_;
4048 _tmp45_ = bala_ccode_base_module_get_symbol_lock_name (self, _tmp44_);
4049 _tmp46_ = _tmp45_;
4050 _tmp47_ = bala_ccode_identifier_new (_tmp46_);
4051 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
4052 l = (BalaCCodeExpression*) _tmp47_;
4053 _g_free0 (_tmp46_)(_tmp46_ = (g_free (_tmp46_), ((void*)0)));
4054 _g_free0 (_tmp44_)(_tmp44_ = (g_free (_tmp44_), ((void*)0)));
4055 _g_free0 (_tmp42_)(_tmp42_ = (g_free (_tmp42_), ((void*)0)));
4056 _g_free0 (_tmp40_)(_tmp40_ = (g_free (_tmp40_), ((void*)0)));
4057 }
4058 }
4059 _tmp48_ = init_context;
4060 bala_ccode_base_module_push_context (self, _tmp48_);
4061 _tmp49_ = self->mutex_type;
4062 _tmp50_ = bala_struct_get_default_construction_method (_tmp49_);
4063 _tmp51_ = _tmp50_;
4064 _tmp52_ = bala_get_ccode_name ((BalaCodeNode*) _tmp51_);
4065 _tmp53_ = _tmp52_;
4066 _tmp54_ = bala_ccode_identifier_new (_tmp53_);
4067 _tmp55_ = _tmp54_;
4068 _tmp56_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp55_);
4069 _tmp57_ = _tmp56_;
4070 _bala_ccode_node_unref0 (_tmp55_)((_tmp55_ == ((void*)0)) ? ((void*)0) : (_tmp55_ = (bala_ccode_node_unref
(_tmp55_), ((void*)0))))
;
4071 _g_free0 (_tmp53_)(_tmp53_ = (g_free (_tmp53_), ((void*)0)));
4072 initf = _tmp57_;
4073 _tmp58_ = initf;
4074 _tmp59_ = l;
4075 _tmp60_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp59_);
4076 _tmp61_ = _tmp60_;
4077 bala_ccode_function_call_add_argument (_tmp58_, (BalaCCodeExpression*) _tmp61_);
4078 _bala_ccode_node_unref0 (_tmp61_)((_tmp61_ == ((void*)0)) ? ((void*)0) : (_tmp61_ = (bala_ccode_node_unref
(_tmp61_), ((void*)0))))
;
4079 _tmp62_ = bala_ccode_base_module_get_ccode (self);
4080 _tmp63_ = _tmp62_;
4081 _tmp64_ = initf;
4082 bala_ccode_function_add_expression (_tmp63_, (BalaCCodeExpression*) _tmp64_);
4083 bala_ccode_base_module_pop_context (self);
4084 _tmp65_ = finalize_context;
4085 if (_tmp65_ != NULL((void*)0)) {
4086 BalaCCodeBaseModuleEmitContext* _tmp66_;
4087 BalaCCodeFunctionCall* fc = NULL((void*)0);
4088 BalaCCodeIdentifier* _tmp67_;
4089 BalaCCodeIdentifier* _tmp68_;
4090 BalaCCodeFunctionCall* _tmp69_;
4091 BalaCCodeFunctionCall* _tmp70_;
4092 BalaCCodeFunctionCall* _tmp71_;
4093 BalaCCodeExpression* _tmp72_;
4094 BalaCCodeUnaryExpression* _tmp73_;
4095 BalaCCodeUnaryExpression* _tmp74_;
4096 BalaCCodeFunction* _tmp75_;
4097 BalaCCodeFunction* _tmp76_;
4098 BalaCCodeFunctionCall* _tmp77_;
4099 _tmp66_ = finalize_context;
4100 bala_ccode_base_module_push_context (self, _tmp66_);
4101 _tmp67_ = bala_ccode_identifier_new ("g_rec_mutex_clear");
4102 _tmp68_ = _tmp67_;
4103 _tmp69_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp68_);
4104 _tmp70_ = _tmp69_;
4105 _bala_ccode_node_unref0 (_tmp68_)((_tmp68_ == ((void*)0)) ? ((void*)0) : (_tmp68_ = (bala_ccode_node_unref
(_tmp68_), ((void*)0))))
;
4106 fc = _tmp70_;
4107 _tmp71_ = fc;
4108 _tmp72_ = l;
4109 _tmp73_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp72_);
4110 _tmp74_ = _tmp73_;
4111 bala_ccode_function_call_add_argument (_tmp71_, (BalaCCodeExpression*) _tmp74_);
4112 _bala_ccode_node_unref0 (_tmp74_)((_tmp74_ == ((void*)0)) ? ((void*)0) : (_tmp74_ = (bala_ccode_node_unref
(_tmp74_), ((void*)0))))
;
4113 _tmp75_ = bala_ccode_base_module_get_ccode (self);
4114 _tmp76_ = _tmp75_;
4115 _tmp77_ = fc;
4116 bala_ccode_function_add_expression (_tmp76_, (BalaCCodeExpression*) _tmp77_);
4117 bala_ccode_base_module_pop_context (self);
4118 _bala_ccode_node_unref0 (fc)((fc == ((void*)0)) ? ((void*)0) : (fc = (bala_ccode_node_unref
(fc), ((void*)0))))
;
4119 }
4120 _bala_ccode_node_unref0 (initf)((initf == ((void*)0)) ? ((void*)0) : (initf = (bala_ccode_node_unref
(initf), ((void*)0))))
;
4121 _bala_ccode_base_module_emit_context_unref0 (finalize_context)((finalize_context == ((void*)0)) ? ((void*)0) : (finalize_context
= (bala_ccode_base_module_emit_context_unref (finalize_context
), ((void*)0))))
;
4122 _bala_ccode_base_module_emit_context_unref0 (init_context)((init_context == ((void*)0)) ? ((void*)0) : (init_context = (
bala_ccode_base_module_emit_context_unref (init_context), ((void
*)0))))
;
4123 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
4124 }
4125}
4126
4127static void
4128bala_ccode_base_module_constant_array_ranks_sizes (BalaInitializerList* initializer_list,
4129 gint* sizes,
4130 gint sizes_length1,
4131 gint rank)
4132{
4133 gint _tmp0_;
4134 gint _tmp1_;
4135 gint _tmp2_;
4136 gint _tmp3_;
4137 g_return_if_fail (initializer_list != NULL)do { if ((initializer_list != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "initializer_list != NULL"
); return; } } while (0)
;
4138 _tmp0_ = sizes[rank];
4139 _tmp1_ = bala_initializer_list_get_size (initializer_list);
4140 _tmp2_ = _tmp1_;
4141 sizes[rank] = MAX (_tmp0_, _tmp2_)(((_tmp0_) > (_tmp2_)) ? (_tmp0_) : (_tmp2_));
4142 _tmp3_ = rank;
4143 rank = _tmp3_ + 1;
4144 {
4145 BalaList* _expr_list = NULL((void*)0);
4146 BalaList* _tmp4_;
4147 BalaList* _tmp5_;
4148 gint _expr_size = 0;
4149 BalaList* _tmp6_;
4150 gint _tmp7_;
4151 gint _tmp8_;
4152 gint _expr_index = 0;
4153 _tmp4_ = bala_initializer_list_get_initializers (initializer_list);
4154 _tmp5_ = _bala_iterable_ref0 (_tmp4_);
4155 _expr_list = _tmp5_;
4156 _tmp6_ = _expr_list;
4157 _tmp7_ = bala_collection_get_size ((BalaCollection*) _tmp6_);
4158 _tmp8_ = _tmp7_;
4159 _expr_size = _tmp8_;
4160 _expr_index = -1;
4161 while (TRUE(!(0))) {
4162 gint _tmp9_;
4163 gint _tmp10_;
4164 BalaExpression* expr = NULL((void*)0);
4165 BalaList* _tmp11_;
4166 gpointer _tmp12_;
4167 gboolean _tmp13_ = FALSE(0);
4168 BalaExpression* _tmp14_;
4169 _expr_index = _expr_index + 1;
4170 _tmp9_ = _expr_index;
4171 _tmp10_ = _expr_size;
4172 if (!(_tmp9_ < _tmp10_)) {
4173 break;
4174 }
4175 _tmp11_ = _expr_list;
4176 _tmp12_ = bala_list_get (_tmp11_, _expr_index);
4177 expr = (BalaExpression*) _tmp12_;
4178 _tmp14_ = expr;
4179 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp14_, BALA_TYPE_INITIALIZER_LIST)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp14_); GType __t = ((bala_initializer_list_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
4180 BalaExpression* _tmp15_;
4181 BalaDataType* _tmp16_;
4182 BalaDataType* _tmp17_;
4183 _tmp15_ = expr;
4184 _tmp16_ = bala_expression_get_target_type ((BalaExpression*) G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, BALA_TYPE_INITIALIZER_LIST, BalaInitializerList)(((BalaInitializerList*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp15_), ((bala_initializer_list_get_type ())))))
);
4185 _tmp17_ = _tmp16_;
4186 _tmp13_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp17_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
4187 } else {
4188 _tmp13_ = FALSE(0);
4189 }
4190 if (_tmp13_) {
4191 BalaExpression* _tmp18_;
4192 _tmp18_ = expr;
4193 bala_ccode_base_module_constant_array_ranks_sizes (G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, BALA_TYPE_INITIALIZER_LIST, BalaInitializerList)(((BalaInitializerList*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp18_), ((bala_initializer_list_get_type ())))))
, sizes, (gint) sizes_length1, rank);
4194 }
4195 _bala_code_node_unref0 (expr)((expr == ((void*)0)) ? ((void*)0) : (expr = (bala_code_node_unref
(expr), ((void*)0))))
;
4196 }
4197 _bala_iterable_unref0 (_expr_list)((_expr_list == ((void*)0)) ? ((void*)0) : (_expr_list = (bala_iterable_unref
(_expr_list), ((void*)0))))
;
4198 }
4199}
4200
4201static BalaCCodeDeclaratorSuffix*
4202bala_ccode_base_module_get_constant_declarator_suffix (BalaCCodeBaseModule* self,
4203 BalaConstant* c)
4204{
4205 BalaArrayType* array = NULL((void*)0);
4206 BalaDataType* _tmp0_;
4207 BalaDataType* _tmp1_;
4208 BalaInitializerList* initializer_list = NULL((void*)0);
4209 BalaExpression* _tmp2_;
4210 BalaExpression* _tmp3_;
4211 gboolean _tmp4_ = FALSE(0);
4212 BalaArrayType* _tmp5_;
4213 BalaArrayList* lengths = NULL((void*)0);
4214 GEqualFunc _tmp11_;
4215 BalaArrayList* _tmp12_;
4216 gint* sizes = NULL((void*)0);
4217 BalaArrayType* _tmp13_;
4218 gint _tmp14_;
4219 gint _tmp15_;
4220 gint* _tmp16_;
4221 gint sizes_length1;
4222 gint _sizes_size_;
4223 BalaInitializerList* _tmp17_;
4224 gint* _tmp18_;
4225 gint _tmp18__length1;
4226 BalaArrayList* _tmp31_;
4227 BalaCCodeDeclaratorSuffix* _tmp32_;
4228 BalaCCodeDeclaratorSuffix* result = NULL((void*)0);
4229 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
4230 g_return_val_if_fail (c != NULL, NULL)do { if ((c != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "c != NULL"); return
(((void*)0)); } } while (0)
;
4231 _tmp0_ = bala_constant_get_type_reference (c);
4232 _tmp1_ = _tmp0_;
4233 array = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp1_) : NULL((void*)0);
4234 _tmp2_ = bala_constant_get_value (c);
4235 _tmp3_ = _tmp2_;
4236 initializer_list = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_INITIALIZER_LIST)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_initializer_list_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaInitializerList*) _tmp3_) : NULL((void*)0);
4237 _tmp5_ = array;
4238 if (_tmp5_ == NULL((void*)0)) {
4239 _tmp4_ = TRUE(!(0));
4240 } else {
4241 BalaInitializerList* _tmp6_;
4242 _tmp6_ = initializer_list;
4243 _tmp4_ = _tmp6_ == NULL((void*)0);
4244 }
4245 if (_tmp4_) {
4246 BalaDataType* _tmp7_;
4247 BalaDataType* _tmp8_;
4248 BalaDataType* _tmp9_;
4249 _tmp7_ = bala_constant_get_type_reference (c);
4250 _tmp8_ = _tmp7_;
4251 _tmp9_ = self->string_type;
4252 if (bala_data_type_compatible (_tmp8_, _tmp9_)) {
4253 BalaCCodeDeclaratorSuffix* _tmp10_;
4254 _tmp10_ = bala_ccode_declarator_suffix_new_with_array (NULL((void*)0));
4255 result = _tmp10_;
4256 return result;
4257 }
4258 result = NULL((void*)0);
4259 return result;
4260 }
4261 _tmp11_ = g_direct_equal;
4262 _tmp12_ = bala_array_list_new (BALA_TYPE_CCODE_EXPRESSION(bala_ccode_expression_get_type ()), (GBoxedCopyFunc) bala_ccode_node_ref, (GDestroyNotify) bala_ccode_node_unref, _tmp11_);
4263 lengths = _tmp12_;
4264 _tmp13_ = array;
4265 _tmp14_ = bala_array_type_get_rank (_tmp13_);
4266 _tmp15_ = _tmp14_;
4267 _tmp16_ = g_new0 (gint, _tmp15_)((gint *) g_malloc0_n ((_tmp15_), sizeof (gint)));
4268 sizes = _tmp16_;
4269 sizes_length1 = _tmp15_;
4270 _sizes_size_ = sizes_length1;
4271 _tmp17_ = initializer_list;
4272 _tmp18_ = sizes;
4273 _tmp18__length1 = sizes_length1;
4274 bala_ccode_base_module_constant_array_ranks_sizes (_tmp17_, _tmp18_, (gint) _tmp18__length1, 0);
4275 {
4276 gint i = 0;
4277 i = 0;
4278 {
4279 gboolean _tmp19_ = FALSE(0);
4280 _tmp19_ = TRUE(!(0));
4281 while (TRUE(!(0))) {
4282 BalaArrayType* _tmp21_;
4283 gint _tmp22_;
4284 gint _tmp23_;
4285 BalaArrayList* _tmp24_;
4286 gint* _tmp25_;
4287 gint _tmp25__length1;
4288 gint _tmp26_;
4289 gchar* _tmp27_;
4290 gchar* _tmp28_;
4291 BalaCCodeConstant* _tmp29_;
4292 BalaCCodeConstant* _tmp30_;
4293 if (!_tmp19_) {
4294 gint _tmp20_;
4295 _tmp20_ = i;
4296 i = _tmp20_ + 1;
4297 }
4298 _tmp19_ = FALSE(0);
4299 _tmp21_ = array;
4300 _tmp22_ = bala_array_type_get_rank (_tmp21_);
4301 _tmp23_ = _tmp22_;
4302 if (!(i < _tmp23_)) {
4303 break;
4304 }
4305 _tmp24_ = lengths;
4306 _tmp25_ = sizes;
4307 _tmp25__length1 = sizes_length1;
4308 _tmp26_ = _tmp25_[i];
4309 _tmp27_ = g_strdup_printf ("%d", _tmp26_);
4310 _tmp28_ = _tmp27_;
4311 _tmp29_ = bala_ccode_constant_new (_tmp28_);
4312 _tmp30_ = _tmp29_;
4313 bala_collection_add ((BalaCollection*) _tmp24_, (BalaCCodeExpression*) _tmp30_);
4314 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
4315 _g_free0 (_tmp28_)(_tmp28_ = (g_free (_tmp28_), ((void*)0)));
4316 }
4317 }
4318 }
4319 _tmp31_ = lengths;
4320 _tmp32_ = bala_ccode_declarator_suffix_new_with_multi_array ((BalaList*) _tmp31_);
4321 result = _tmp32_;
4322 sizes = (g_free (sizes), NULL((void*)0));
4323 _bala_iterable_unref0 (lengths)((lengths == ((void*)0)) ? ((void*)0) : (lengths = (bala_iterable_unref
(lengths), ((void*)0))))
;
4324 return result;
4325}
4326
4327void
4328bala_ccode_base_module_generate_constant_declaration (BalaCCodeBaseModule* self,
4329 BalaConstant* c,
4330 BalaCCodeFile* decl_space,
4331 gboolean definition)
4332{
4333 BalaSymbol* _tmp0_;
4334 BalaSymbol* _tmp1_;
4335 gchar* _tmp2_;
4336 gchar* _tmp3_;
4337 gboolean _tmp4_;
4338 gboolean _tmp5_ = FALSE(0);
4339 gboolean _tmp6_;
4340 gboolean _tmp7_;
4341 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
4342 g_return_if_fail (c != NULL)do { if ((c != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "c != NULL"); return
; } } while (0)
;
4343 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
4344 _tmp0_ = bala_symbol_get_parent_symbol ((BalaSymbol*) c);
4345 _tmp1_ = _tmp0_;
4346 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
4347 return;
4348 }
4349 _tmp2_ = bala_get_ccode_name ((BalaCodeNode*) c);
4350 _tmp3_ = _tmp2_;
4351 _tmp4_ = bala_ccode_base_module_add_symbol_declaration (self, decl_space, (BalaSymbol*) c, _tmp3_);
4352 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
4353 if (_tmp4_) {
4354 return;
4355 }
4356 _tmp6_ = bala_symbol_get_external ((BalaSymbol*) c);
4357 _tmp7_ = _tmp6_;
4358 if (!_tmp7_) {
4359 BalaExpression* _tmp8_;
4360 BalaExpression* _tmp9_;
4361 _tmp8_ = bala_constant_get_value (c);
4362 _tmp9_ = _tmp8_;
4363 _tmp5_ = _tmp9_ != NULL((void*)0);
4364 } else {
4365 _tmp5_ = FALSE(0);
4366 }
4367 if (_tmp5_) {
4368 BalaDataType* _tmp10_;
4369 BalaDataType* _tmp11_;
4370 BalaExpression* _tmp12_;
4371 BalaExpression* _tmp13_;
4372 BalaInitializerList* initializer_list = NULL((void*)0);
4373 BalaExpression* _tmp14_;
4374 BalaExpression* _tmp15_;
4375 BalaInitializerList* _tmp16_;
4376 BalaInitializerList* _tmp17_;
4377 _tmp10_ = bala_constant_get_type_reference (c);
4378 _tmp11_ = _tmp10_;
4379 bala_ccode_base_module_generate_type_declaration (self, _tmp11_, decl_space);
4380 _tmp12_ = bala_constant_get_value (c);
4381 _tmp13_ = _tmp12_;
4382 bala_code_node_emit ((BalaCodeNode*) _tmp13_, (BalaCodeGenerator*) self);
4383 _tmp14_ = bala_constant_get_value (c);
4384 _tmp15_ = _tmp14_;
4385 _tmp16_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, BALA_TYPE_INITIALIZER_LIST)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp15_); GType __t = ((bala_initializer_list_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaInitializerList*) _tmp15_) : NULL((void*)0));
4386 initializer_list = _tmp16_;
4387 _tmp17_ = initializer_list;
4388 if (_tmp17_ != NULL((void*)0)) {
4389 BalaCCodeDeclaration* _cdecl_ = NULL((void*)0);
4390 BalaDataType* _tmp18_;
4391 BalaDataType* _tmp19_;
4392 gchar* _tmp20_;
4393 gchar* _tmp21_;
4394 BalaCCodeDeclaration* _tmp22_;
4395 BalaCCodeDeclaration* _tmp23_;
4396 BalaCCodeExpression* cinitializer = NULL((void*)0);
4397 BalaExpression* _tmp24_;
4398 BalaExpression* _tmp25_;
4399 BalaCCodeExpression* _tmp26_;
4400 BalaCCodeExpression* _tmp27_;
4401 BalaCCodeDeclaration* _tmp28_;
4402 gchar* _tmp29_;
4403 gchar* _tmp30_;
4404 BalaCCodeExpression* _tmp31_;
4405 BalaCCodeDeclaratorSuffix* _tmp32_;
4406 BalaCCodeDeclaratorSuffix* _tmp33_;
4407 BalaCCodeVariableDeclarator* _tmp34_;
4408 BalaCCodeVariableDeclarator* _tmp35_;
4409 BalaCCodeDeclaration* _tmp38_;
4410 _tmp18_ = bala_constant_get_type_reference (c);
4411 _tmp19_ = _tmp18_;
4412 _tmp20_ = bala_get_ccode_const_name ((BalaCodeNode*) _tmp19_);
4413 _tmp21_ = _tmp20_;
4414 _tmp22_ = bala_ccode_declaration_new (_tmp21_);
4415 _tmp23_ = _tmp22_;
4416 _g_free0 (_tmp21_)(_tmp21_ = (g_free (_tmp21_), ((void*)0)));
4417 _cdecl_ = _tmp23_;
4418 _tmp24_ = bala_constant_get_value (c);
4419 _tmp25_ = _tmp24_;
4420 _tmp26_ = bala_get_cvalue (_tmp25_);
4421 _tmp27_ = _bala_ccode_node_ref0 (_tmp26_);
4422 cinitializer = _tmp27_;
4423 if (!definition) {
4424 _bala_ccode_node_unref0 (cinitializer)((cinitializer == ((void*)0)) ? ((void*)0) : (cinitializer = (
bala_ccode_node_unref (cinitializer), ((void*)0))))
;
4425 cinitializer = NULL((void*)0);
4426 }
4427 _tmp28_ = _cdecl_;
4428 _tmp29_ = bala_get_ccode_name ((BalaCodeNode*) c);
4429 _tmp30_ = _tmp29_;
4430 _tmp31_ = cinitializer;
4431 _tmp32_ = bala_ccode_base_module_get_constant_declarator_suffix (self, c);
4432 _tmp33_ = _tmp32_;
4433 _tmp34_ = bala_ccode_variable_declarator_new (_tmp30_, _tmp31_, _tmp33_);
4434 _tmp35_ = _tmp34_;
4435 bala_ccode_declaration_add_declarator (_tmp28_, (BalaCCodeDeclarator*) _tmp35_);
4436 _bala_ccode_node_unref0 (_tmp35_)((_tmp35_ == ((void*)0)) ? ((void*)0) : (_tmp35_ = (bala_ccode_node_unref
(_tmp35_), ((void*)0))))
;
4437 _bala_ccode_declarator_suffix_unref0 (_tmp33_)((_tmp33_ == ((void*)0)) ? ((void*)0) : (_tmp33_ = (bala_ccode_declarator_suffix_unref
(_tmp33_), ((void*)0))))
;
4438 _g_free0 (_tmp30_)(_tmp30_ = (g_free (_tmp30_), ((void*)0)));
4439 if (bala_symbol_is_private_symbol ((BalaSymbol*) c)) {
4440 BalaCCodeDeclaration* _tmp36_;
4441 _tmp36_ = _cdecl_;
4442 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp36_, BALA_CCODE_MODIFIERS_STATIC);
4443 } else {
4444 BalaCCodeDeclaration* _tmp37_;
4445 _tmp37_ = _cdecl_;
4446 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp37_, BALA_CCODE_MODIFIERS_EXTERN);
4447 }
4448 _tmp38_ = _cdecl_;
4449 bala_ccode_file_add_constant_declaration (decl_space, (BalaCCodeNode*) _tmp38_);
4450 _bala_ccode_node_unref0 (cinitializer)((cinitializer == ((void*)0)) ? ((void*)0) : (cinitializer = (
bala_ccode_node_unref (cinitializer), ((void*)0))))
;
4451 _bala_ccode_node_unref0 (_cdecl_)((_cdecl_ == ((void*)0)) ? ((void*)0) : (_cdecl_ = (bala_ccode_node_unref
(_cdecl_), ((void*)0))))
;
4452 } else {
4453 gboolean _tmp39_ = FALSE(0);
4454 BalaExpression* _tmp40_;
4455 BalaExpression* _tmp41_;
4456 BalaCCodeMacroReplacement* cdefine = NULL((void*)0);
4457 gchar* _tmp59_;
4458 gchar* _tmp60_;
4459 BalaExpression* _tmp61_;
4460 BalaExpression* _tmp62_;
4461 BalaCCodeExpression* _tmp63_;
4462 BalaCCodeMacroReplacement* _tmp64_;
4463 BalaCCodeMacroReplacement* _tmp65_;
4464 BalaCCodeMacroReplacement* _tmp66_;
4465 _tmp40_ = bala_constant_get_value (c);
4466 _tmp41_ = _tmp40_;
4467 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, BALA_TYPE_STRING_LITERAL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp41_); GType __t = ((bala_string_literal_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
4468 BalaExpression* _tmp42_;
4469 BalaExpression* _tmp43_;
4470 gboolean _tmp44_;
4471 gboolean _tmp45_;
4472 _tmp42_ = bala_constant_get_value (c);
4473 _tmp43_ = _tmp42_;
4474 _tmp44_ = bala_string_literal_get_translate (G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, BALA_TYPE_STRING_LITERAL, BalaStringLiteral)(((BalaStringLiteral*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp43_), ((bala_string_literal_get_type ())))))
);
4475 _tmp45_ = _tmp44_;
4476 _tmp39_ = _tmp45_;
4477 } else {
4478 _tmp39_ = FALSE(0);
4479 }
4480 if (_tmp39_) {
4481 BalaMethod* m = NULL((void*)0);
4482 BalaSymbol* _tmp46_;
4483 BalaScope* _tmp47_;
4484 BalaScope* _tmp48_;
4485 BalaSymbol* _tmp49_;
4486 BalaSymbol* _tmp50_;
4487 BalaScope* _tmp51_;
4488 BalaScope* _tmp52_;
4489 BalaSymbol* _tmp53_;
4490 BalaMethod* _tmp54_;
4491 BalaMethod* _tmp55_;
4492 BalaMethod* _tmp56_;
4493 gchar* _tmp57_;
4494 gchar* _tmp58_;
4495 _tmp46_ = self->root_symbol;
4496 _tmp47_ = bala_symbol_get_scope (_tmp46_);
4497 _tmp48_ = _tmp47_;
4498 _tmp49_ = bala_scope_lookup (_tmp48_, "GLib");
4499 _tmp50_ = _tmp49_;
4500 _tmp51_ = bala_symbol_get_scope (_tmp50_);
4501 _tmp52_ = _tmp51_;
4502 _tmp53_ = bala_scope_lookup (_tmp52_, "_");
4503 _tmp54_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp53_, BALA_TYPE_METHOD, BalaMethod)(((BalaMethod*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp53_), ((bala_method_get_type ())))))
;
4504 _bala_code_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_code_node_unref
(_tmp50_), ((void*)0))))
;
4505 m = _tmp54_;
4506 _tmp55_ = m;
4507 _tmp56_ = m;
4508 _tmp57_ = bala_get_ccode_name ((BalaCodeNode*) _tmp56_);
4509 _tmp58_ = _tmp57_;
4510 bala_ccode_base_module_add_symbol_declaration (self, decl_space, (BalaSymbol*) _tmp55_, _tmp58_);
4511 _g_free0 (_tmp58_)(_tmp58_ = (g_free (_tmp58_), ((void*)0)));
4512 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
4513 }
4514 _tmp59_ = bala_get_ccode_name ((BalaCodeNode*) c);
4515 _tmp60_ = _tmp59_;
4516 _tmp61_ = bala_constant_get_value (c);
4517 _tmp62_ = _tmp61_;
4518 _tmp63_ = bala_get_cvalue (_tmp62_);
4519 _tmp64_ = bala_ccode_macro_replacement_new_with_expression (_tmp60_, _tmp63_);
4520 _tmp65_ = _tmp64_;
4521 _g_free0 (_tmp60_)(_tmp60_ = (g_free (_tmp60_), ((void*)0)));
4522 cdefine = _tmp65_;
4523 _tmp66_ = cdefine;
4524 bala_ccode_file_add_type_member_declaration (decl_space, (BalaCCodeNode*) _tmp66_);
4525 _bala_ccode_node_unref0 (cdefine)((cdefine == ((void*)0)) ? ((void*)0) : (cdefine = (bala_ccode_node_unref
(cdefine), ((void*)0))))
;
4526 }
4527 _bala_code_node_unref0 (initializer_list)((initializer_list == ((void*)0)) ? ((void*)0) : (initializer_list
= (bala_code_node_unref (initializer_list), ((void*)0))))
;
4528 }
4529}
4530
4531static void
4532bala_ccode_base_module_real_visit_constant (BalaCodeVisitor* base,
4533 BalaConstant* c)
4534{
4535 BalaCCodeBaseModule * self;
4536 BalaSourceReference* _tmp0_;
4537 BalaSourceReference* _tmp1_;
4538 BalaSymbol* _tmp2_;
4539 BalaSymbol* _tmp3_;
4540 self = (BalaCCodeBaseModule*) base;
4541 g_return_if_fail (c != NULL)do { if ((c != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "c != NULL"); return
; } } while (0)
;
4542 _tmp0_ = bala_code_node_get_source_reference ((BalaCodeNode*) c);
4543 _tmp1_ = _tmp0_;
4544 bala_ccode_base_module_push_line (self, _tmp1_);
4545 _tmp2_ = bala_symbol_get_parent_symbol ((BalaSymbol*) c);
4546 _tmp3_ = _tmp2_;
4547 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
4548 BalaDataType* _tmp4_;
4549 BalaDataType* _tmp5_;
4550 BalaCCodeFile* _tmp6_;
4551 BalaExpression* _tmp7_;
4552 BalaExpression* _tmp8_;
4553 gchar* type_name = NULL((void*)0);
4554 BalaDataType* _tmp9_;
4555 BalaDataType* _tmp10_;
4556 BalaDataType* _tmp11_;
4557 BalaCCodeExpression* cinitializer = NULL((void*)0);
4558 BalaExpression* _tmp16_;
4559 BalaExpression* _tmp17_;
4560 BalaCCodeExpression* _tmp18_;
4561 BalaCCodeExpression* _tmp19_;
4562 BalaCCodeFunction* _tmp20_;
4563 BalaCCodeFunction* _tmp21_;
4564 const gchar* _tmp22_;
4565 gchar* _tmp23_;
4566 gchar* _tmp24_;
4567 BalaCCodeExpression* _tmp25_;
4568 BalaCCodeDeclaratorSuffix* _tmp26_;
4569 BalaCCodeDeclaratorSuffix* _tmp27_;
4570 BalaCCodeVariableDeclarator* _tmp28_;
4571 BalaCCodeVariableDeclarator* _tmp29_;
4572 _tmp4_ = bala_constant_get_type_reference (c);
4573 _tmp5_ = _tmp4_;
4574 _tmp6_ = self->cfile;
4575 bala_ccode_base_module_generate_type_declaration (self, _tmp5_, _tmp6_);
4576 _tmp7_ = bala_constant_get_value (c);
4577 _tmp8_ = _tmp7_;
4578 bala_code_node_emit ((BalaCodeNode*) _tmp8_, (BalaCodeGenerator*) self);
4579 _tmp9_ = bala_constant_get_type_reference (c);
4580 _tmp10_ = _tmp9_;
4581 _tmp11_ = self->string_type;
4582 if (bala_data_type_compatible (_tmp10_, _tmp11_)) {
4583 gchar* _tmp12_;
4584 _tmp12_ = g_strdup ("const char");
4585 _g_free0 (type_name)(type_name = (g_free (type_name), ((void*)0)));
4586 type_name = _tmp12_;
4587 } else {
4588 BalaDataType* _tmp13_;
4589 BalaDataType* _tmp14_;
4590 gchar* _tmp15_;
4591 _tmp13_ = bala_constant_get_type_reference (c);
4592 _tmp14_ = _tmp13_;
4593 _tmp15_ = bala_get_ccode_const_name ((BalaCodeNode*) _tmp14_);
4594 _g_free0 (type_name)(type_name = (g_free (type_name), ((void*)0)));
4595 type_name = _tmp15_;
4596 }
4597 _tmp16_ = bala_constant_get_value (c);
4598 _tmp17_ = _tmp16_;
4599 _tmp18_ = bala_get_cvalue (_tmp17_);
4600 _tmp19_ = _bala_ccode_node_ref0 (_tmp18_);
4601 cinitializer = _tmp19_;
4602 _tmp20_ = bala_ccode_base_module_get_ccode (self);
4603 _tmp21_ = _tmp20_;
4604 _tmp22_ = type_name;
4605 _tmp23_ = bala_get_ccode_name ((BalaCodeNode*) c);
4606 _tmp24_ = _tmp23_;
4607 _tmp25_ = cinitializer;
4608 _tmp26_ = bala_ccode_base_module_get_constant_declarator_suffix (self, c);
4609 _tmp27_ = _tmp26_;
4610 _tmp28_ = bala_ccode_variable_declarator_new (_tmp24_, _tmp25_, _tmp27_);
4611 _tmp29_ = _tmp28_;
4612 bala_ccode_function_add_declaration (_tmp21_, _tmp22_, (BalaCCodeDeclarator*) _tmp29_, BALA_CCODE_MODIFIERS_STATIC);
4613 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
4614 _bala_ccode_declarator_suffix_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_ccode_declarator_suffix_unref
(_tmp27_), ((void*)0))))
;
4615 _g_free0 (_tmp24_)(_tmp24_ = (g_free (_tmp24_), ((void*)0)));
4616 _bala_ccode_node_unref0 (cinitializer)((cinitializer == ((void*)0)) ? ((void*)0) : (cinitializer = (
bala_ccode_node_unref (cinitializer), ((void*)0))))
;
4617 _g_free0 (type_name)(type_name = (g_free (type_name), ((void*)0)));
4618 } else {
4619 BalaCCodeFile* _tmp30_;
4620 _tmp30_ = self->cfile;
4621 bala_ccode_base_module_generate_constant_declaration (self, c, _tmp30_, TRUE(!(0)));
4622 if (!bala_symbol_is_internal_symbol ((BalaSymbol*) c)) {
4623 BalaCCodeFile* _tmp31_;
4624 _tmp31_ = self->header_file;
4625 bala_ccode_base_module_generate_constant_declaration (self, c, _tmp31_, FALSE(0));
4626 }
4627 if (!bala_symbol_is_private_symbol ((BalaSymbol*) c)) {
4628 BalaCCodeFile* _tmp32_;
4629 _tmp32_ = self->internal_header_file;
4630 bala_ccode_base_module_generate_constant_declaration (self, c, _tmp32_, FALSE(0));
4631 }
4632 }
4633 bala_ccode_base_module_pop_line (self);
4634}
4635
4636void
4637bala_ccode_base_module_append_field (BalaCCodeBaseModule* self,
4638 BalaCCodeStruct* ccode_struct,
4639 BalaField* f,
4640 BalaCCodeFile* decl_space)
4641{
4642 BalaDataType* _tmp0_;
4643 BalaDataType* _tmp1_;
4644 BalaCCodeModifiers _tmp2_ = 0U;
4645 gboolean _tmp3_;
4646 gboolean _tmp4_;
4647 BalaCCodeModifiers _tmp5_ = 0U;
4648 BalaVersionAttribute* _tmp6_;
4649 BalaVersionAttribute* _tmp7_;
4650 gboolean _tmp8_;
4651 gboolean _tmp9_;
4652 BalaCCodeModifiers modifiers = 0U;
4653 BalaDataType* _tmp10_;
4654 BalaDataType* _tmp11_;
4655 gchar* _tmp12_;
4656 gchar* _tmp13_;
4657 gchar* _tmp14_;
4658 gchar* _tmp15_;
4659 BalaCCodeModifiers _tmp16_;
4660 BalaDataType* _tmp17_;
4661 BalaDataType* _tmp18_;
4662 BalaCCodeDeclaratorSuffix* _tmp19_;
4663 BalaCCodeDeclaratorSuffix* _tmp20_;
4664 gboolean _tmp21_ = FALSE(0);
4665 BalaDataType* _tmp22_;
4666 BalaDataType* _tmp23_;
4667 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
4668 g_return_if_fail (ccode_struct != NULL)do { if ((ccode_struct != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "ccode_struct != NULL"
); return; } } while (0)
;
4669 g_return_if_fail (f != NULL)do { if ((f != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "f != NULL"); return
; } } while (0)
;
4670 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
4671 _tmp0_ = bala_variable_get_variable_type ((BalaVariable*) f);
4672 _tmp1_ = _tmp0_;
4673 bala_ccode_base_module_generate_type_declaration (self, _tmp1_, decl_space);
4674 _tmp3_ = bala_field_get_is_volatile (f);
4675 _tmp4_ = _tmp3_;
4676 if (_tmp4_) {
4677 _tmp2_ = BALA_CCODE_MODIFIERS_VOLATILE;
4678 } else {
4679 _tmp2_ = 0;
4680 }
4681 _tmp6_ = bala_symbol_get_version ((BalaSymbol*) f);
4682 _tmp7_ = _tmp6_;
4683 _tmp8_ = bala_version_attribute_get_deprecated (_tmp7_);
4684 _tmp9_ = _tmp8_;
4685 if (_tmp9_) {
4686 _tmp5_ = BALA_CCODE_MODIFIERS_DEPRECATED;
4687 } else {
4688 _tmp5_ = 0;
4689 }
4690 modifiers = _tmp2_ | _tmp5_;
4691 _tmp10_ = bala_variable_get_variable_type ((BalaVariable*) f);
4692 _tmp11_ = _tmp10_;
4693 _tmp12_ = bala_get_ccode_name ((BalaCodeNode*) _tmp11_);
4694 _tmp13_ = _tmp12_;
4695 _tmp14_ = bala_get_ccode_name ((BalaCodeNode*) f);
4696 _tmp15_ = _tmp14_;
4697 _tmp16_ = modifiers;
4698 _tmp17_ = bala_variable_get_variable_type ((BalaVariable*) f);
4699 _tmp18_ = _tmp17_;
4700 _tmp19_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp18_);
4701 _tmp20_ = _tmp19_;
4702 bala_ccode_struct_add_field (ccode_struct, _tmp13_, _tmp15_, _tmp16_, _tmp20_);
4703 _bala_ccode_declarator_suffix_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_declarator_suffix_unref
(_tmp20_), ((void*)0))))
;
4704 _g_free0 (_tmp15_)(_tmp15_ = (g_free (_tmp15_), ((void*)0)));
4705 _g_free0 (_tmp13_)(_tmp13_ = (g_free (_tmp13_), ((void*)0)));
4706 _tmp22_ = bala_variable_get_variable_type ((BalaVariable*) f);
4707 _tmp23_ = _tmp22_;
4708 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp23_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
4709 _tmp21_ = bala_get_ccode_array_length ((BalaCodeNode*) f);
4710 } else {
4711 _tmp21_ = FALSE(0);
4712 }
4713 if (_tmp21_) {
4714 BalaArrayType* array_type = NULL((void*)0);
4715 BalaDataType* _tmp24_;
4716 BalaDataType* _tmp25_;
4717 BalaArrayType* _tmp26_;
4718 BalaArrayType* _tmp27_;
4719 gboolean _tmp28_;
4720 gboolean _tmp29_;
4721 _tmp24_ = bala_variable_get_variable_type ((BalaVariable*) f);
4722 _tmp25_ = _tmp24_;
4723 _tmp26_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp25_), ((bala_array_type_get_type ())))))
);
4724 array_type = _tmp26_;
4725 _tmp27_ = array_type;
4726 _tmp28_ = bala_array_type_get_fixed_length (_tmp27_);
4727 _tmp29_ = _tmp28_;
4728 if (!_tmp29_) {
4729 gchar* length_ctype = NULL((void*)0);
4730 gchar* _tmp30_;
4731 gboolean _tmp39_ = FALSE(0);
4732 BalaArrayType* _tmp40_;
4733 gint _tmp41_;
4734 gint _tmp42_;
4735 _tmp30_ = bala_get_ccode_array_length_type ((BalaCodeNode*) f);
4736 length_ctype = _tmp30_;
4737 {
4738 gint dim = 0;
4739 dim = 1;
4740 {
4741 gboolean _tmp31_ = FALSE(0);
4742 _tmp31_ = TRUE(!(0));
4743 while (TRUE(!(0))) {
4744 BalaArrayType* _tmp33_;
4745 gint _tmp34_;
4746 gint _tmp35_;
4747 gchar* length_cname = NULL((void*)0);
4748 gchar* _tmp36_;
4749 const gchar* _tmp37_;
4750 const gchar* _tmp38_;
4751 if (!_tmp31_) {
4752 gint _tmp32_;
4753 _tmp32_ = dim;
4754 dim = _tmp32_ + 1;
4755 }
4756 _tmp31_ = FALSE(0);
4757 _tmp33_ = array_type;
4758 _tmp34_ = bala_array_type_get_rank (_tmp33_);
4759 _tmp35_ = _tmp34_;
4760 if (!(dim <= _tmp35_)) {
4761 break;
4762 }
4763 _tmp36_ = bala_ccode_base_module_get_variable_array_length_cname (self, (BalaVariable*) f, dim);
4764 length_cname = _tmp36_;
4765 _tmp37_ = length_ctype;
4766 _tmp38_ = length_cname;
4767 bala_ccode_struct_add_field (ccode_struct, _tmp37_, _tmp38_, 0, NULL((void*)0));
4768 _g_free0 (length_cname)(length_cname = (g_free (length_cname), ((void*)0)));
4769 }
4770 }
4771 }
4772 _tmp40_ = array_type;
4773 _tmp41_ = bala_array_type_get_rank (_tmp40_);
4774 _tmp42_ = _tmp41_;
4775 if (_tmp42_ == 1) {
4776 _tmp39_ = bala_symbol_is_internal_symbol ((BalaSymbol*) f);
4777 } else {
4778 _tmp39_ = FALSE(0);
4779 }
4780 if (_tmp39_) {
4781 const gchar* _tmp43_;
4782 gchar* _tmp44_;
4783 gchar* _tmp45_;
4784 gchar* _tmp46_;
4785 gchar* _tmp47_;
4786 _tmp43_ = length_ctype;
4787 _tmp44_ = bala_get_ccode_name ((BalaCodeNode*) f);
4788 _tmp45_ = _tmp44_;
4789 _tmp46_ = bala_ccode_base_module_get_array_size_cname (self, _tmp45_);
4790 _tmp47_ = _tmp46_;
4791 bala_ccode_struct_add_field (ccode_struct, _tmp43_, _tmp47_, 0, NULL((void*)0));
4792 _g_free0 (_tmp47_)(_tmp47_ = (g_free (_tmp47_), ((void*)0)));
4793 _g_free0 (_tmp45_)(_tmp45_ = (g_free (_tmp45_), ((void*)0)));
4794 }
4795 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
4796 }
4797 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
4798 } else {
4799 if (bala_get_ccode_delegate_target ((BalaCodeNode*) f)) {
4800 BalaDelegateType* delegate_type = NULL((void*)0);
4801 BalaDataType* _tmp48_;
4802 BalaDataType* _tmp49_;
4803 BalaDelegateType* _tmp50_;
4804 BalaDelegateType* _tmp51_;
4805 BalaDelegate* _tmp52_;
4806 BalaDelegate* _tmp53_;
4807 gboolean _tmp54_;
4808 gboolean _tmp55_;
4809 _tmp48_ = bala_variable_get_variable_type ((BalaVariable*) f);
4810 _tmp49_ = _tmp48_;
4811 _tmp50_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp49_), ((bala_delegate_type_get_type ())))))
);
4812 delegate_type = _tmp50_;
4813 _tmp51_ = delegate_type;
4814 _tmp52_ = bala_delegate_type_get_delegate_symbol (_tmp51_);
4815 _tmp53_ = _tmp52_;
4816 _tmp54_ = bala_delegate_get_has_target (_tmp53_);
4817 _tmp55_ = _tmp54_;
4818 if (_tmp55_) {
4819 BalaDataType* _tmp56_;
4820 gchar* _tmp57_;
4821 gchar* _tmp58_;
4822 gchar* _tmp59_;
4823 gchar* _tmp60_;
4824 BalaDelegateType* _tmp61_;
4825 _tmp56_ = self->delegate_target_type;
4826 _tmp57_ = bala_get_ccode_name ((BalaCodeNode*) _tmp56_);
4827 _tmp58_ = _tmp57_;
4828 _tmp59_ = bala_get_ccode_delegate_target_name ((BalaVariable*) f);
4829 _tmp60_ = _tmp59_;
4830 bala_ccode_struct_add_field (ccode_struct, _tmp58_, _tmp60_, 0, NULL((void*)0));
4831 _g_free0 (_tmp60_)(_tmp60_ = (g_free (_tmp60_), ((void*)0)));
4832 _g_free0 (_tmp58_)(_tmp58_ = (g_free (_tmp58_), ((void*)0)));
4833 _tmp61_ = delegate_type;
4834 if (bala_data_type_is_disposable ((BalaDataType*) _tmp61_)) {
4835 BalaDelegateType* _tmp62_;
4836 gchar* _tmp63_;
4837 gchar* _tmp64_;
4838 gchar* _tmp65_;
4839 gchar* _tmp66_;
4840 _tmp62_ = self->delegate_target_destroy_type;
4841 _tmp63_ = bala_get_ccode_name ((BalaCodeNode*) _tmp62_);
4842 _tmp64_ = _tmp63_;
4843 _tmp65_ = bala_get_ccode_delegate_target_destroy_notify_name ((BalaVariable*) f);
4844 _tmp66_ = _tmp65_;
4845 bala_ccode_struct_add_field (ccode_struct, _tmp64_, _tmp66_, 0, NULL((void*)0));
4846 _g_free0 (_tmp66_)(_tmp66_ = (g_free (_tmp66_), ((void*)0)));
4847 _g_free0 (_tmp64_)(_tmp64_ = (g_free (_tmp64_), ((void*)0)));
4848 }
4849 }
4850 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
4851 }
4852 }
4853}
4854
4855void
4856bala_ccode_base_module_generate_field_declaration (BalaCCodeBaseModule* self,
4857 BalaField* f,
4858 BalaCCodeFile* decl_space)
4859{
4860 gchar* _tmp0_;
4861 gchar* _tmp1_;
4862 gboolean _tmp2_;
4863 BalaDataType* _tmp3_;
4864 BalaDataType* _tmp4_;
4865 BalaCCodeDeclaration* _cdecl_ = NULL((void*)0);
4866 BalaDataType* _tmp5_;
4867 BalaDataType* _tmp6_;
4868 gchar* _tmp7_;
4869 gchar* _tmp8_;
4870 BalaCCodeDeclaration* _tmp9_;
4871 BalaCCodeDeclaration* _tmp10_;
4872 BalaCCodeDeclaration* _tmp11_;
4873 gchar* _tmp12_;
4874 gchar* _tmp13_;
4875 BalaDataType* _tmp14_;
4876 BalaDataType* _tmp15_;
4877 BalaCCodeDeclaratorSuffix* _tmp16_;
4878 BalaCCodeDeclaratorSuffix* _tmp17_;
4879 BalaCCodeVariableDeclarator* _tmp18_;
4880 BalaCCodeVariableDeclarator* _tmp19_;
4881 BalaVersionAttribute* _tmp22_;
4882 BalaVersionAttribute* _tmp23_;
4883 gboolean _tmp24_;
4884 gboolean _tmp25_;
4885 gboolean _tmp30_;
4886 gboolean _tmp31_;
4887 BalaCCodeDeclaration* _tmp36_;
4888 gboolean _tmp37_;
4889 gboolean _tmp38_;
4890 gboolean _tmp68_ = FALSE(0);
4891 BalaDataType* _tmp69_;
4892 BalaDataType* _tmp70_;
4893 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
4894 g_return_if_fail (f != NULL)do { if ((f != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "f != NULL"); return
; } } while (0)
;
4895 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
4896 _tmp0_ = bala_get_ccode_name ((BalaCodeNode*) f);
4897 _tmp1_ = _tmp0_;
4898 _tmp2_ = bala_ccode_base_module_add_symbol_declaration (self, decl_space, (BalaSymbol*) f, _tmp1_);
4899 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
4900 if (_tmp2_) {
4901 return;
4902 }
4903 _tmp3_ = bala_variable_get_variable_type ((BalaVariable*) f);
4904 _tmp4_ = _tmp3_;
4905 bala_ccode_base_module_generate_type_declaration (self, _tmp4_, decl_space);
4906 _tmp5_ = bala_variable_get_variable_type ((BalaVariable*) f);
4907 _tmp6_ = _tmp5_;
4908 _tmp7_ = bala_get_ccode_name ((BalaCodeNode*) _tmp6_);
4909 _tmp8_ = _tmp7_;
4910 _tmp9_ = bala_ccode_declaration_new (_tmp8_);
4911 _tmp10_ = _tmp9_;
4912 _g_free0 (_tmp8_)(_tmp8_ = (g_free (_tmp8_), ((void*)0)));
4913 _cdecl_ = _tmp10_;
4914 _tmp11_ = _cdecl_;
4915 _tmp12_ = bala_get_ccode_name ((BalaCodeNode*) f);
4916 _tmp13_ = _tmp12_;
4917 _tmp14_ = bala_variable_get_variable_type ((BalaVariable*) f);
4918 _tmp15_ = _tmp14_;
4919 _tmp16_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp15_);
4920 _tmp17_ = _tmp16_;
4921 _tmp18_ = bala_ccode_variable_declarator_new (_tmp13_, NULL((void*)0), _tmp17_);
4922 _tmp19_ = _tmp18_;
4923 bala_ccode_declaration_add_declarator (_tmp11_, (BalaCCodeDeclarator*) _tmp19_);
4924 _bala_ccode_node_unref0 (_tmp19_)((_tmp19_ == ((void*)0)) ? ((void*)0) : (_tmp19_ = (bala_ccode_node_unref
(_tmp19_), ((void*)0))))
;
4925 _bala_ccode_declarator_suffix_unref0 (_tmp17_)((_tmp17_ == ((void*)0)) ? ((void*)0) : (_tmp17_ = (bala_ccode_declarator_suffix_unref
(_tmp17_), ((void*)0))))
;
4926 _g_free0 (_tmp13_)(_tmp13_ = (g_free (_tmp13_), ((void*)0)));
4927 if (bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
4928 BalaCCodeDeclaration* _tmp20_;
4929 _tmp20_ = _cdecl_;
4930 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp20_, BALA_CCODE_MODIFIERS_STATIC);
4931 } else {
4932 BalaCCodeDeclaration* _tmp21_;
4933 _tmp21_ = _cdecl_;
4934 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp21_, BALA_CCODE_MODIFIERS_EXTERN);
4935 }
4936 _tmp22_ = bala_symbol_get_version ((BalaSymbol*) f);
4937 _tmp23_ = _tmp22_;
4938 _tmp24_ = bala_version_attribute_get_deprecated (_tmp23_);
4939 _tmp25_ = _tmp24_;
4940 if (_tmp25_) {
4941 BalaCCodeDeclaration* _tmp26_;
4942 BalaCCodeDeclaration* _tmp27_;
4943 BalaCCodeModifiers _tmp28_;
4944 BalaCCodeModifiers _tmp29_;
4945 _tmp26_ = _cdecl_;
4946 _tmp27_ = _cdecl_;
4947 _tmp28_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp27_);
4948 _tmp29_ = _tmp28_;
4949 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp27_, _tmp29_ | BALA_CCODE_MODIFIERS_DEPRECATED);
4950 }
4951 _tmp30_ = bala_field_get_is_volatile (f);
4952 _tmp31_ = _tmp30_;
4953 if (_tmp31_) {
4954 BalaCCodeDeclaration* _tmp32_;
4955 BalaCCodeDeclaration* _tmp33_;
4956 BalaCCodeModifiers _tmp34_;
4957 BalaCCodeModifiers _tmp35_;
4958 _tmp32_ = _cdecl_;
4959 _tmp33_ = _cdecl_;
4960 _tmp34_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp33_);
4961 _tmp35_ = _tmp34_;
4962 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp33_, _tmp35_ | BALA_CCODE_MODIFIERS_VOLATILE);
4963 }
4964 _tmp36_ = _cdecl_;
4965 bala_ccode_file_add_type_member_declaration (decl_space, (BalaCCodeNode*) _tmp36_);
4966 _tmp37_ = bala_lockable_get_lock_used ((BalaLockable*) f);
4967 _tmp38_ = _tmp37_;
4968 if (_tmp38_) {
4969 BalaCCodeDeclaration* flock = NULL((void*)0);
4970 BalaStruct* _tmp39_;
4971 gchar* _tmp40_;
4972 gchar* _tmp41_;
4973 BalaCCodeDeclaration* _tmp42_;
4974 BalaCCodeDeclaration* _tmp43_;
4975 BalaCCodeVariableDeclarator* flock_decl = NULL((void*)0);
4976 BalaSymbol* _tmp44_;
4977 BalaSymbol* _tmp45_;
4978 gchar* _tmp46_;
4979 gchar* _tmp47_;
4980 gchar* _tmp48_;
4981 gchar* _tmp49_;
4982 gchar* _tmp50_;
4983 gchar* _tmp51_;
4984 gchar* _tmp52_;
4985 gchar* _tmp53_;
4986 BalaCCodeConstant* _tmp54_;
4987 BalaCCodeConstant* _tmp55_;
4988 BalaCCodeVariableDeclarator* _tmp56_;
4989 BalaCCodeVariableDeclarator* _tmp57_;
4990 BalaCCodeDeclaration* _tmp58_;
4991 BalaCCodeVariableDeclarator* _tmp59_;
4992 BalaCCodeDeclaration* _tmp67_;
4993 _tmp39_ = self->mutex_type;
4994 _tmp40_ = bala_get_ccode_name ((BalaCodeNode*) _tmp39_);
4995 _tmp41_ = _tmp40_;
4996 _tmp42_ = bala_ccode_declaration_new (_tmp41_);
4997 _tmp43_ = _tmp42_;
4998 _g_free0 (_tmp41_)(_tmp41_ = (g_free (_tmp41_), ((void*)0)));
4999 flock = _tmp43_;
5000 _tmp44_ = bala_symbol_get_parent_symbol ((BalaSymbol*) f);
5001 _tmp45_ = _tmp44_;
5002 _tmp46_ = bala_get_ccode_lower_case_name ((BalaCodeNode*) _tmp45_, NULL((void*)0));
5003 _tmp47_ = _tmp46_;
5004 _tmp48_ = bala_get_ccode_name ((BalaCodeNode*) f);
5005 _tmp49_ = _tmp48_;
5006 _tmp50_ = g_strdup_printf ("%s_%s", _tmp47_, _tmp49_);
5007 _tmp51_ = _tmp50_;
5008 _tmp52_ = bala_ccode_base_module_get_symbol_lock_name (self, _tmp51_);
5009 _tmp53_ = _tmp52_;
5010 _tmp54_ = bala_ccode_constant_new ("{0}");
5011 _tmp55_ = _tmp54_;
5012 _tmp56_ = bala_ccode_variable_declarator_new (_tmp53_, (BalaCCodeExpression*) _tmp55_, NULL((void*)0));
5013 _tmp57_ = _tmp56_;
5014 _bala_ccode_node_unref0 (_tmp55_)((_tmp55_ == ((void*)0)) ? ((void*)0) : (_tmp55_ = (bala_ccode_node_unref
(_tmp55_), ((void*)0))))
;
5015 _g_free0 (_tmp53_)(_tmp53_ = (g_free (_tmp53_), ((void*)0)));
5016 _g_free0 (_tmp51_)(_tmp51_ = (g_free (_tmp51_), ((void*)0)));
5017 _g_free0 (_tmp49_)(_tmp49_ = (g_free (_tmp49_), ((void*)0)));
5018 _g_free0 (_tmp47_)(_tmp47_ = (g_free (_tmp47_), ((void*)0)));
5019 flock_decl = _tmp57_;
5020 _tmp58_ = flock;
5021 _tmp59_ = flock_decl;
5022 bala_ccode_declaration_add_declarator (_tmp58_, (BalaCCodeDeclarator*) _tmp59_);
5023 if (bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
5024 BalaCCodeDeclaration* _tmp60_;
5025 _tmp60_ = flock;
5026 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp60_, BALA_CCODE_MODIFIERS_STATIC);
5027 } else {
5028 gboolean _tmp61_ = FALSE(0);
5029 BalaCodeContext* _tmp62_;
5030 gboolean _tmp63_;
5031 gboolean _tmp64_;
5032 _tmp62_ = self->priv->_context;
5033 _tmp63_ = bala_code_context_get_hide_internal (_tmp62_);
5034 _tmp64_ = _tmp63_;
5035 if (_tmp64_) {
5036 _tmp61_ = bala_symbol_is_internal_symbol ((BalaSymbol*) f);
5037 } else {
5038 _tmp61_ = FALSE(0);
5039 }
5040 if (_tmp61_) {
5041 BalaCCodeDeclaration* _tmp65_;
5042 _tmp65_ = flock;
5043 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp65_, BALA_CCODE_MODIFIERS_INTERNAL);
5044 } else {
5045 BalaCCodeDeclaration* _tmp66_;
5046 _tmp66_ = flock;
5047 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp66_, BALA_CCODE_MODIFIERS_EXTERN);
5048 }
5049 }
5050 _tmp67_ = flock;
5051 bala_ccode_file_add_type_member_declaration (decl_space, (BalaCCodeNode*) _tmp67_);
5052 _bala_ccode_node_unref0 (flock_decl)((flock_decl == ((void*)0)) ? ((void*)0) : (flock_decl = (bala_ccode_node_unref
(flock_decl), ((void*)0))))
;
5053 _bala_ccode_node_unref0 (flock)((flock == ((void*)0)) ? ((void*)0) : (flock = (bala_ccode_node_unref
(flock), ((void*)0))))
;
5054 }
5055 _tmp69_ = bala_variable_get_variable_type ((BalaVariable*) f);
5056 _tmp70_ = _tmp69_;
5057 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp70_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp70_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
5058 _tmp68_ = bala_get_ccode_array_length ((BalaCodeNode*) f);
5059 } else {
5060 _tmp68_ = FALSE(0);
5061 }
5062 if (_tmp68_) {
5063 BalaArrayType* array_type = NULL((void*)0);
5064 BalaDataType* _tmp71_;
5065 BalaDataType* _tmp72_;
5066 BalaArrayType* _tmp73_;
5067 BalaArrayType* _tmp74_;
5068 gboolean _tmp75_;
5069 gboolean _tmp76_;
5070 _tmp71_ = bala_variable_get_variable_type ((BalaVariable*) f);
5071 _tmp72_ = _tmp71_;
5072 _tmp73_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp72_), ((bala_array_type_get_type ())))))
);
5073 array_type = _tmp73_;
5074 _tmp74_ = array_type;
5075 _tmp75_ = bala_array_type_get_fixed_length (_tmp74_);
5076 _tmp76_ = _tmp75_;
5077 if (!_tmp76_) {
5078 gchar* length_ctype = NULL((void*)0);
5079 gchar* _tmp77_;
5080 _tmp77_ = bala_get_ccode_array_length_type ((BalaCodeNode*) f);
5081 length_ctype = _tmp77_;
5082 {
5083 gint dim = 0;
5084 dim = 1;
5085 {
5086 gboolean _tmp78_ = FALSE(0);
5087 _tmp78_ = TRUE(!(0));
5088 while (TRUE(!(0))) {
5089 BalaArrayType* _tmp80_;
5090 gint _tmp81_;
5091 gint _tmp82_;
5092 const gchar* _tmp83_;
5093 BalaCCodeDeclaration* _tmp84_;
5094 BalaCCodeDeclaration* _tmp85_;
5095 gchar* _tmp86_;
5096 gchar* _tmp87_;
5097 BalaCCodeVariableDeclarator* _tmp88_;
5098 BalaCCodeVariableDeclarator* _tmp89_;
5099 BalaCCodeDeclaration* _tmp97_;
5100 if (!_tmp78_) {
5101 gint _tmp79_;
5102 _tmp79_ = dim;
5103 dim = _tmp79_ + 1;
5104 }
5105 _tmp78_ = FALSE(0);
5106 _tmp80_ = array_type;
5107 _tmp81_ = bala_array_type_get_rank (_tmp80_);
5108 _tmp82_ = _tmp81_;
5109 if (!(dim <= _tmp82_)) {
5110 break;
5111 }
5112 _tmp83_ = length_ctype;
5113 _tmp84_ = bala_ccode_declaration_new (_tmp83_);
5114 _bala_ccode_node_unref0 (_cdecl_)((_cdecl_ == ((void*)0)) ? ((void*)0) : (_cdecl_ = (bala_ccode_node_unref
(_cdecl_), ((void*)0))))
;
5115 _cdecl_ = _tmp84_;
5116 _tmp85_ = _cdecl_;
5117 _tmp86_ = bala_ccode_base_module_get_variable_array_length_cname (self, (BalaVariable*) f, dim);
5118 _tmp87_ = _tmp86_;
5119 _tmp88_ = bala_ccode_variable_declarator_new (_tmp87_, NULL((void*)0), NULL((void*)0));
5120 _tmp89_ = _tmp88_;
5121 bala_ccode_declaration_add_declarator (_tmp85_, (BalaCCodeDeclarator*) _tmp89_);
5122 _bala_ccode_node_unref0 (_tmp89_)((_tmp89_ == ((void*)0)) ? ((void*)0) : (_tmp89_ = (bala_ccode_node_unref
(_tmp89_), ((void*)0))))
;
5123 _g_free0 (_tmp87_)(_tmp87_ = (g_free (_tmp87_), ((void*)0)));
5124 if (bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
5125 BalaCCodeDeclaration* _tmp90_;
5126 _tmp90_ = _cdecl_;
5127 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp90_, BALA_CCODE_MODIFIERS_STATIC);
5128 } else {
5129 gboolean _tmp91_ = FALSE(0);
5130 BalaCodeContext* _tmp92_;
5131 gboolean _tmp93_;
5132 gboolean _tmp94_;
5133 _tmp92_ = self->priv->_context;
5134 _tmp93_ = bala_code_context_get_hide_internal (_tmp92_);
5135 _tmp94_ = _tmp93_;
5136 if (_tmp94_) {
5137 _tmp91_ = bala_symbol_is_internal_symbol ((BalaSymbol*) f);
5138 } else {
5139 _tmp91_ = FALSE(0);
5140 }
5141 if (_tmp91_) {
5142 BalaCCodeDeclaration* _tmp95_;
5143 _tmp95_ = _cdecl_;
5144 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp95_, BALA_CCODE_MODIFIERS_INTERNAL);
5145 } else {
5146 BalaCCodeDeclaration* _tmp96_;
5147 _tmp96_ = _cdecl_;
5148 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp96_, BALA_CCODE_MODIFIERS_EXTERN);
5149 }
5150 }
5151 _tmp97_ = _cdecl_;
5152 bala_ccode_file_add_type_member_declaration (decl_space, (BalaCCodeNode*) _tmp97_);
5153 }
5154 }
5155 }
5156 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
5157 }
5158 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
5159 } else {
5160 if (bala_get_ccode_delegate_target ((BalaCodeNode*) f)) {
5161 BalaDelegateType* delegate_type = NULL((void*)0);
5162 BalaDataType* _tmp98_;
5163 BalaDataType* _tmp99_;
5164 BalaDelegateType* _tmp100_;
5165 BalaDelegateType* _tmp101_;
5166 BalaDelegate* _tmp102_;
5167 BalaDelegate* _tmp103_;
5168 gboolean _tmp104_;
5169 gboolean _tmp105_;
5170 _tmp98_ = bala_variable_get_variable_type ((BalaVariable*) f);
5171 _tmp99_ = _tmp98_;
5172 _tmp100_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp99_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp99_), ((bala_delegate_type_get_type ())))))
);
5173 delegate_type = _tmp100_;
5174 _tmp101_ = delegate_type;
5175 _tmp102_ = bala_delegate_type_get_delegate_symbol (_tmp101_);
5176 _tmp103_ = _tmp102_;
5177 _tmp104_ = bala_delegate_get_has_target (_tmp103_);
5178 _tmp105_ = _tmp104_;
5179 if (_tmp105_) {
5180 BalaDataType* _tmp106_;
5181 gchar* _tmp107_;
5182 gchar* _tmp108_;
5183 BalaCCodeDeclaration* _tmp109_;
5184 BalaCCodeDeclaration* _tmp110_;
5185 gchar* _tmp111_;
5186 gchar* _tmp112_;
5187 BalaCCodeVariableDeclarator* _tmp113_;
5188 BalaCCodeVariableDeclarator* _tmp114_;
5189 BalaCCodeDeclaration* _tmp122_;
5190 BalaDelegateType* _tmp123_;
5191 _tmp106_ = self->delegate_target_type;
5192 _tmp107_ = bala_get_ccode_name ((BalaCodeNode*) _tmp106_);
5193 _tmp108_ = _tmp107_;
5194 _tmp109_ = bala_ccode_declaration_new (_tmp108_);
5195 _bala_ccode_node_unref0 (_cdecl_)((_cdecl_ == ((void*)0)) ? ((void*)0) : (_cdecl_ = (bala_ccode_node_unref
(_cdecl_), ((void*)0))))
;
5196 _cdecl_ = _tmp109_;
5197 _g_free0 (_tmp108_)(_tmp108_ = (g_free (_tmp108_), ((void*)0)));
5198 _tmp110_ = _cdecl_;
5199 _tmp111_ = bala_get_ccode_delegate_target_name ((BalaVariable*) f);
5200 _tmp112_ = _tmp111_;
5201 _tmp113_ = bala_ccode_variable_declarator_new (_tmp112_, NULL((void*)0), NULL((void*)0));
5202 _tmp114_ = _tmp113_;
5203 bala_ccode_declaration_add_declarator (_tmp110_, (BalaCCodeDeclarator*) _tmp114_);
5204 _bala_ccode_node_unref0 (_tmp114_)((_tmp114_ == ((void*)0)) ? ((void*)0) : (_tmp114_ = (bala_ccode_node_unref
(_tmp114_), ((void*)0))))
;
5205 _g_free0 (_tmp112_)(_tmp112_ = (g_free (_tmp112_), ((void*)0)));
5206 if (bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
5207 BalaCCodeDeclaration* _tmp115_;
5208 _tmp115_ = _cdecl_;
5209 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp115_, BALA_CCODE_MODIFIERS_STATIC);
5210 } else {
5211 gboolean _tmp116_ = FALSE(0);
5212 BalaCodeContext* _tmp117_;
5213 gboolean _tmp118_;
5214 gboolean _tmp119_;
5215 _tmp117_ = self->priv->_context;
5216 _tmp118_ = bala_code_context_get_hide_internal (_tmp117_);
5217 _tmp119_ = _tmp118_;
5218 if (_tmp119_) {
5219 _tmp116_ = bala_symbol_is_internal_symbol ((BalaSymbol*) f);
5220 } else {
5221 _tmp116_ = FALSE(0);
5222 }
5223 if (_tmp116_) {
5224 BalaCCodeDeclaration* _tmp120_;
5225 _tmp120_ = _cdecl_;
5226 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp120_, BALA_CCODE_MODIFIERS_INTERNAL);
5227 } else {
5228 BalaCCodeDeclaration* _tmp121_;
5229 _tmp121_ = _cdecl_;
5230 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp121_, BALA_CCODE_MODIFIERS_EXTERN);
5231 }
5232 }
5233 _tmp122_ = _cdecl_;
5234 bala_ccode_file_add_type_member_declaration (decl_space, (BalaCCodeNode*) _tmp122_);
5235 _tmp123_ = delegate_type;
5236 if (bala_data_type_is_disposable ((BalaDataType*) _tmp123_)) {
5237 BalaDelegateType* _tmp124_;
5238 gchar* _tmp125_;
5239 gchar* _tmp126_;
5240 BalaCCodeDeclaration* _tmp127_;
5241 BalaCCodeDeclaration* _tmp128_;
5242 gchar* _tmp129_;
5243 gchar* _tmp130_;
5244 BalaCCodeVariableDeclarator* _tmp131_;
5245 BalaCCodeVariableDeclarator* _tmp132_;
5246 BalaCCodeDeclaration* _tmp140_;
5247 _tmp124_ = self->delegate_target_destroy_type;
5248 _tmp125_ = bala_get_ccode_name ((BalaCodeNode*) _tmp124_);
5249 _tmp126_ = _tmp125_;
5250 _tmp127_ = bala_ccode_declaration_new (_tmp126_);
5251 _bala_ccode_node_unref0 (_cdecl_)((_cdecl_ == ((void*)0)) ? ((void*)0) : (_cdecl_ = (bala_ccode_node_unref
(_cdecl_), ((void*)0))))
;
5252 _cdecl_ = _tmp127_;
5253 _g_free0 (_tmp126_)(_tmp126_ = (g_free (_tmp126_), ((void*)0)));
5254 _tmp128_ = _cdecl_;
5255 _tmp129_ = bala_get_ccode_delegate_target_destroy_notify_name ((BalaVariable*) f);
5256 _tmp130_ = _tmp129_;
5257 _tmp131_ = bala_ccode_variable_declarator_new (_tmp130_, NULL((void*)0), NULL((void*)0));
5258 _tmp132_ = _tmp131_;
5259 bala_ccode_declaration_add_declarator (_tmp128_, (BalaCCodeDeclarator*) _tmp132_);
5260 _bala_ccode_node_unref0 (_tmp132_)((_tmp132_ == ((void*)0)) ? ((void*)0) : (_tmp132_ = (bala_ccode_node_unref
(_tmp132_), ((void*)0))))
;
5261 _g_free0 (_tmp130_)(_tmp130_ = (g_free (_tmp130_), ((void*)0)));
5262 if (bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
5263 BalaCCodeDeclaration* _tmp133_;
5264 _tmp133_ = _cdecl_;
5265 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp133_, BALA_CCODE_MODIFIERS_STATIC);
5266 } else {
5267 gboolean _tmp134_ = FALSE(0);
5268 BalaCodeContext* _tmp135_;
5269 gboolean _tmp136_;
5270 gboolean _tmp137_;
5271 _tmp135_ = self->priv->_context;
5272 _tmp136_ = bala_code_context_get_hide_internal (_tmp135_);
5273 _tmp137_ = _tmp136_;
5274 if (_tmp137_) {
5275 _tmp134_ = bala_symbol_is_internal_symbol ((BalaSymbol*) f);
5276 } else {
5277 _tmp134_ = FALSE(0);
5278 }
5279 if (_tmp134_) {
5280 BalaCCodeDeclaration* _tmp138_;
5281 _tmp138_ = _cdecl_;
5282 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp138_, BALA_CCODE_MODIFIERS_INTERNAL);
5283 } else {
5284 BalaCCodeDeclaration* _tmp139_;
5285 _tmp139_ = _cdecl_;
5286 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp139_, BALA_CCODE_MODIFIERS_EXTERN);
5287 }
5288 }
5289 _tmp140_ = _cdecl_;
5290 bala_ccode_file_add_type_member_declaration (decl_space, (BalaCCodeNode*) _tmp140_);
5291 }
5292 }
5293 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
5294 }
5295 }
5296 _bala_ccode_node_unref0 (_cdecl_)((_cdecl_ == ((void*)0)) ? ((void*)0) : (_cdecl_ = (bala_ccode_node_unref
(_cdecl_), ((void*)0))))
;
5297}
5298
5299static gpointer
5300_bala_target_value_ref0 (gpointer self)
5301{
5302 return self ? bala_target_value_ref (self) : NULL((void*)0);
5303}
5304
5305static void
5306bala_ccode_base_module_real_visit_field (BalaCodeVisitor* base,
5307 BalaField* f)
5308{
5309 BalaCCodeBaseModule * self;
5310 BalaSourceReference* _tmp0_;
5311 BalaSourceReference* _tmp1_;
5312 BalaClass* cl = NULL((void*)0);
5313 BalaSymbol* _tmp2_;
5314 BalaSymbol* _tmp3_;
5315 BalaClass* _tmp4_;
5316 gboolean _tmp5_ = FALSE(0);
5317 BalaClass* _tmp6_;
5318 gboolean is_gtypeinstance = FALSE(0);
5319 BalaCCodeExpression* lhs = NULL((void*)0);
5320 BalaMemberBinding _tmp10_;
5321 BalaMemberBinding _tmp11_;
5322 self = (BalaCCodeBaseModule*) base;
5323 g_return_if_fail (f != NULL)do { if ((f != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "f != NULL"); return
; } } while (0)
;
5324 _tmp0_ = bala_code_node_get_source_reference ((BalaCodeNode*) f);
5325 _tmp1_ = _tmp0_;
5326 bala_ccode_base_module_push_line (self, _tmp1_);
5327 bala_ccode_base_module_visit_member (self, (BalaSymbol*) f);
5328 _tmp2_ = bala_symbol_get_parent_symbol ((BalaSymbol*) f);
5329 _tmp3_ = _tmp2_;
5330 _tmp4_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp3_) : NULL((void*)0));
5331 cl = _tmp4_;
5332 _tmp6_ = cl;
5333 if (_tmp6_ != NULL((void*)0)) {
5334 BalaClass* _tmp7_;
5335 gboolean _tmp8_;
5336 gboolean _tmp9_;
5337 _tmp7_ = cl;
5338 _tmp8_ = bala_class_get_is_compact (_tmp7_);
5339 _tmp9_ = _tmp8_;
5340 _tmp5_ = !_tmp9_;
5341 } else {
5342 _tmp5_ = FALSE(0);
5343 }
5344 is_gtypeinstance = _tmp5_;
5345 lhs = NULL((void*)0);
5346 _tmp10_ = bala_field_get_binding (f);
5347 _tmp11_ = _tmp10_;
5348 if (_tmp11_ == BALA_MEMBER_BINDING_INSTANCE) {
5349 gboolean _tmp12_ = FALSE(0);
5350 BalaExpression* _tmp27_;
5351 BalaExpression* _tmp28_;
5352 gboolean _tmp159_ = FALSE(0);
5353 gboolean _tmp160_ = FALSE(0);
5354 gboolean _tmp161_ = FALSE(0);
5355 BalaDataType* _tmp162_;
5356 BalaDataType* _tmp163_;
5357 if (is_gtypeinstance) {
5358 BalaSymbolAccessibility _tmp13_;
5359 BalaSymbolAccessibility _tmp14_;
5360 _tmp13_ = bala_symbol_get_access ((BalaSymbol*) f);
5361 _tmp14_ = _tmp13_;
5362 _tmp12_ = _tmp14_ == BALA_SYMBOL_ACCESSIBILITY_PRIVATE;
5363 } else {
5364 _tmp12_ = FALSE(0);
5365 }
5366 if (_tmp12_) {
5367 BalaCCodeIdentifier* _tmp15_;
5368 BalaCCodeIdentifier* _tmp16_;
5369 BalaCCodeMemberAccess* _tmp17_;
5370 BalaCCodeMemberAccess* _tmp18_;
5371 gchar* _tmp19_;
5372 gchar* _tmp20_;
5373 BalaCCodeMemberAccess* _tmp21_;
5374 _tmp15_ = bala_ccode_identifier_new ("self");
5375 _tmp16_ = _tmp15_;
5376 _tmp17_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp16_, "priv");
5377 _tmp18_ = _tmp17_;
5378 _tmp19_ = bala_get_ccode_name ((BalaCodeNode*) f);
5379 _tmp20_ = _tmp19_;
5380 _tmp21_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp18_, _tmp20_);
5381 _bala_ccode_node_unref0 (lhs)((lhs == ((void*)0)) ? ((void*)0) : (lhs = (bala_ccode_node_unref
(lhs), ((void*)0))))
;
5382 lhs = (BalaCCodeExpression*) _tmp21_;
5383 _g_free0 (_tmp20_)(_tmp20_ = (g_free (_tmp20_), ((void*)0)));
5384 _bala_ccode_node_unref0 (_tmp18_)((_tmp18_ == ((void*)0)) ? ((void*)0) : (_tmp18_ = (bala_ccode_node_unref
(_tmp18_), ((void*)0))))
;
5385 _bala_ccode_node_unref0 (_tmp16_)((_tmp16_ == ((void*)0)) ? ((void*)0) : (_tmp16_ = (bala_ccode_node_unref
(_tmp16_), ((void*)0))))
;
5386 } else {
5387 BalaCCodeIdentifier* _tmp22_;
5388 BalaCCodeIdentifier* _tmp23_;
5389 gchar* _tmp24_;
5390 gchar* _tmp25_;
5391 BalaCCodeMemberAccess* _tmp26_;
5392 _tmp22_ = bala_ccode_identifier_new ("self");
5393 _tmp23_ = _tmp22_;
5394 _tmp24_ = bala_get_ccode_name ((BalaCodeNode*) f);
5395 _tmp25_ = _tmp24_;
5396 _tmp26_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp23_, _tmp25_);
5397 _bala_ccode_node_unref0 (lhs)((lhs == ((void*)0)) ? ((void*)0) : (lhs = (bala_ccode_node_unref
(lhs), ((void*)0))))
;
5398 lhs = (BalaCCodeExpression*) _tmp26_;
5399 _g_free0 (_tmp25_)(_tmp25_ = (g_free (_tmp25_), ((void*)0)));
5400 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
5401 }
5402 _tmp27_ = bala_variable_get_initializer ((BalaVariable*) f);
5403 _tmp28_ = _tmp27_;
5404 if (_tmp28_ != NULL((void*)0)) {
5405 BalaCCodeBaseModuleEmitContext* _tmp29_;
5406 BalaExpression* _tmp30_;
5407 BalaExpression* _tmp31_;
5408 BalaCCodeExpression* rhs = NULL((void*)0);
5409 BalaExpression* _tmp32_;
5410 BalaExpression* _tmp33_;
5411 BalaCCodeExpression* _tmp34_;
5412 BalaCCodeExpression* _tmp35_;
5413 BalaExpression* _tmp36_;
5414 BalaExpression* _tmp37_;
5415 BalaArrayList* _tmp157_;
5416 BalaArrayList* _tmp158_;
5417 _tmp29_ = self->instance_init_context;
5418 bala_ccode_base_module_push_context (self, _tmp29_);
5419 _tmp30_ = bala_variable_get_initializer ((BalaVariable*) f);
5420 _tmp31_ = _tmp30_;
5421 bala_code_node_emit ((BalaCodeNode*) _tmp31_, (BalaCodeGenerator*) self);
5422 _tmp32_ = bala_variable_get_initializer ((BalaVariable*) f);
5423 _tmp33_ = _tmp32_;
5424 _tmp34_ = bala_get_cvalue (_tmp33_);
5425 _tmp35_ = _bala_ccode_node_ref0 (_tmp34_);
5426 rhs = _tmp35_;
5427 _tmp36_ = bala_variable_get_initializer ((BalaVariable*) f);
5428 _tmp37_ = _tmp36_;
5429 if (!bala_ccode_base_module_is_simple_struct_creation (self, (BalaVariable*) f, _tmp37_)) {
5430 BalaCCodeFunction* _tmp38_;
5431 BalaCCodeFunction* _tmp39_;
5432 BalaCCodeExpression* _tmp40_;
5433 BalaCCodeExpression* _tmp41_;
5434 gboolean _tmp42_ = FALSE(0);
5435 BalaDataType* _tmp43_;
5436 BalaDataType* _tmp44_;
5437 _tmp38_ = bala_ccode_base_module_get_ccode (self);
5438 _tmp39_ = _tmp38_;
5439 _tmp40_ = lhs;
5440 _tmp41_ = rhs;
5441 bala_ccode_function_add_assignment (_tmp39_, _tmp40_, _tmp41_);
5442 _tmp43_ = bala_variable_get_variable_type ((BalaVariable*) f);
5443 _tmp44_ = _tmp43_;
5444 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp44_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp44_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
5445 _tmp42_ = bala_get_ccode_array_length ((BalaCodeNode*) f);
5446 } else {
5447 _tmp42_ = FALSE(0);
5448 }
5449 if (_tmp42_) {
5450 BalaArrayType* array_type = NULL((void*)0);
5451 BalaDataType* _tmp45_;
5452 BalaDataType* _tmp46_;
5453 BalaArrayType* _tmp47_;
5454 BalaTargetValue* field_value = NULL((void*)0);
5455 BalaSymbol* _tmp48_;
5456 BalaSymbol* _tmp49_;
5457 BalaTargetValue* _tmp50_;
5458 BalaTargetValue* _tmp51_;
5459 BalaTargetValue* _tmp52_;
5460 BalaTargetValue* _tmp53_;
5461 BalaGLibValue* glib_value = NULL((void*)0);
5462 BalaExpression* _tmp54_;
5463 BalaExpression* _tmp55_;
5464 BalaTargetValue* _tmp56_;
5465 BalaTargetValue* _tmp57_;
5466 BalaGLibValue* _tmp58_;
5467 BalaGLibValue* _tmp59_;
5468 BalaList* _tmp60_;
5469 gboolean _tmp100_ = FALSE(0);
5470 BalaArrayType* _tmp101_;
5471 gint _tmp102_;
5472 gint _tmp103_;
5473 _tmp45_ = bala_variable_get_variable_type ((BalaVariable*) f);
5474 _tmp46_ = _tmp45_;
5475 _tmp47_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp46_), ((bala_array_type_get_type ())))))
);
5476 array_type = _tmp47_;
5477 _tmp48_ = bala_symbol_get_parent_symbol ((BalaSymbol*) f);
5478 _tmp49_ = _tmp48_;
5479 _tmp50_ = bala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp49_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp49_), ((bala_typesymbol_get_type ())))))
);
5480 _tmp51_ = _tmp50_;
5481 _tmp52_ = bala_ccode_base_module_get_field_cvalue (self, f, _tmp51_);
5482 _tmp53_ = _tmp52_;
5483 _bala_target_value_unref0 (_tmp51_)((_tmp51_ == ((void*)0)) ? ((void*)0) : (_tmp51_ = (bala_target_value_unref
(_tmp51_), ((void*)0))))
;
5484 field_value = _tmp53_;
5485 _tmp54_ = bala_variable_get_initializer ((BalaVariable*) f);
5486 _tmp55_ = _tmp54_;
5487 _tmp56_ = bala_expression_get_target_value (_tmp55_);
5488 _tmp57_ = _tmp56_;
5489 _tmp58_ = _bala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp57_), ((bala_glib_value_get_type ())))))
);
5490 glib_value = _tmp58_;
5491 _tmp59_ = glib_value;
5492 _tmp60_ = _tmp59_->array_length_cvalues;
5493 if (_tmp60_ != NULL((void*)0)) {
5494 {
5495 gint dim = 0;
5496 dim = 1;
5497 {
5498 gboolean _tmp61_ = FALSE(0);
5499 _tmp61_ = TRUE(!(0));
5500 while (TRUE(!(0))) {
5501 BalaArrayType* _tmp63_;
5502 gint _tmp64_;
5503 gint _tmp65_;
5504 BalaCCodeExpression* array_len_lhs = NULL((void*)0);
5505 BalaTargetValue* _tmp66_;
5506 BalaCCodeExpression* _tmp67_;
5507 BalaCCodeFunction* _tmp68_;
5508 BalaCCodeFunction* _tmp69_;
5509 BalaCCodeExpression* _tmp70_;
5510 BalaGLibValue* _tmp71_;
5511 BalaCCodeExpression* _tmp72_;
5512 BalaCCodeExpression* _tmp73_;
5513 if (!_tmp61_) {
5514 gint _tmp62_;
5515 _tmp62_ = dim;
5516 dim = _tmp62_ + 1;
5517 }
5518 _tmp61_ = FALSE(0);
5519 _tmp63_ = array_type;
5520 _tmp64_ = bala_array_type_get_rank (_tmp63_);
5521 _tmp65_ = _tmp64_;
5522 if (!(dim <= _tmp65_)) {
5523 break;
5524 }
5525 _tmp66_ = field_value;
5526 _tmp67_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp66_, dim);
5527 array_len_lhs = _tmp67_;
5528 _tmp68_ = bala_ccode_base_module_get_ccode (self);
5529 _tmp69_ = _tmp68_;
5530 _tmp70_ = array_len_lhs;
5531 _tmp71_ = glib_value;
5532 _tmp72_ = bala_ccode_base_module_get_array_length_cvalue (self, (BalaTargetValue*) _tmp71_, dim);
5533 _tmp73_ = _tmp72_;
5534 bala_ccode_function_add_assignment (_tmp69_, _tmp70_, _tmp73_);
5535 _bala_ccode_node_unref0 (_tmp73_)((_tmp73_ == ((void*)0)) ? ((void*)0) : (_tmp73_ = (bala_ccode_node_unref
(_tmp73_), ((void*)0))))
;
5536 _bala_ccode_node_unref0 (array_len_lhs)((array_len_lhs == ((void*)0)) ? ((void*)0) : (array_len_lhs =
(bala_ccode_node_unref (array_len_lhs), ((void*)0))))
;
5537 }
5538 }
5539 }
5540 } else {
5541 BalaGLibValue* _tmp74_;
5542 _tmp74_ = glib_value;
5543 if (_tmp74_->array_null_terminated) {
5544 BalaCCodeFunctionCall* len_call = NULL((void*)0);
5545 BalaCCodeIdentifier* _tmp75_;
5546 BalaCCodeIdentifier* _tmp76_;
5547 BalaCCodeFunctionCall* _tmp77_;
5548 BalaCCodeFunctionCall* _tmp78_;
5549 BalaCCodeFunctionCall* _tmp79_;
5550 BalaGLibValue* _tmp80_;
5551 BalaCCodeExpression* _tmp81_;
5552 BalaCCodeFunction* _tmp82_;
5553 BalaCCodeFunction* _tmp83_;
5554 BalaTargetValue* _tmp84_;
5555 BalaCCodeExpression* _tmp85_;
5556 BalaCCodeExpression* _tmp86_;
5557 BalaCCodeFunctionCall* _tmp87_;
5558 self->requires_array_length = TRUE(!(0));
5559 _tmp75_ = bala_ccode_identifier_new ("_bala_array_length");
5560 _tmp76_ = _tmp75_;
5561 _tmp77_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp76_);
5562 _tmp78_ = _tmp77_;
5563 _bala_ccode_node_unref0 (_tmp76_)((_tmp76_ == ((void*)0)) ? ((void*)0) : (_tmp76_ = (bala_ccode_node_unref
(_tmp76_), ((void*)0))))
;
5564 len_call = _tmp78_;
5565 _tmp79_ = len_call;
5566 _tmp80_ = glib_value;
5567 _tmp81_ = bala_get_cvalue_ ((BalaTargetValue*) _tmp80_);
5568 bala_ccode_function_call_add_argument (_tmp79_, _tmp81_);
5569 _tmp82_ = bala_ccode_base_module_get_ccode (self);
5570 _tmp83_ = _tmp82_;
5571 _tmp84_ = field_value;
5572 _tmp85_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp84_, 1);
5573 _tmp86_ = _tmp85_;
5574 _tmp87_ = len_call;
5575 bala_ccode_function_add_assignment (_tmp83_, _tmp86_, (BalaCCodeExpression*) _tmp87_);
5576 _bala_ccode_node_unref0 (_tmp86_)((_tmp86_ == ((void*)0)) ? ((void*)0) : (_tmp86_ = (bala_ccode_node_unref
(_tmp86_), ((void*)0))))
;
5577 _bala_ccode_node_unref0 (len_call)((len_call == ((void*)0)) ? ((void*)0) : (len_call = (bala_ccode_node_unref
(len_call), ((void*)0))))
;
5578 } else {
5579 {
5580 gint dim = 0;
5581 dim = 1;
5582 {
5583 gboolean _tmp88_ = FALSE(0);
5584 _tmp88_ = TRUE(!(0));
5585 while (TRUE(!(0))) {
5586 BalaArrayType* _tmp90_;
5587 gint _tmp91_;
5588 gint _tmp92_;
5589 BalaCCodeFunction* _tmp93_;
5590 BalaCCodeFunction* _tmp94_;
5591 BalaTargetValue* _tmp95_;
5592 BalaCCodeExpression* _tmp96_;
5593 BalaCCodeExpression* _tmp97_;
5594 BalaCCodeConstant* _tmp98_;
5595 BalaCCodeConstant* _tmp99_;
5596 if (!_tmp88_) {
5597 gint _tmp89_;
5598 _tmp89_ = dim;
5599 dim = _tmp89_ + 1;
5600 }
5601 _tmp88_ = FALSE(0);
5602 _tmp90_ = array_type;
5603 _tmp91_ = bala_array_type_get_rank (_tmp90_);
5604 _tmp92_ = _tmp91_;
5605 if (!(dim <= _tmp92_)) {
5606 break;
5607 }
5608 _tmp93_ = bala_ccode_base_module_get_ccode (self);
5609 _tmp94_ = _tmp93_;
5610 _tmp95_ = field_value;
5611 _tmp96_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp95_, dim);
5612 _tmp97_ = _tmp96_;
5613 _tmp98_ = bala_ccode_constant_new ("-1");
5614 _tmp99_ = _tmp98_;
5615 bala_ccode_function_add_assignment (_tmp94_, _tmp97_, (BalaCCodeExpression*) _tmp99_);
5616 _bala_ccode_node_unref0 (_tmp99_)((_tmp99_ == ((void*)0)) ? ((void*)0) : (_tmp99_ = (bala_ccode_node_unref
(_tmp99_), ((void*)0))))
;
5617 _bala_ccode_node_unref0 (_tmp97_)((_tmp97_ == ((void*)0)) ? ((void*)0) : (_tmp97_ = (bala_ccode_node_unref
(_tmp97_), ((void*)0))))
;
5618 }
5619 }
5620 }
5621 }
5622 }
5623 _tmp101_ = array_type;
5624 _tmp102_ = bala_array_type_get_rank (_tmp101_);
5625 _tmp103_ = _tmp102_;
5626 if (_tmp103_ == 1) {
5627 _tmp100_ = bala_symbol_is_internal_symbol ((BalaSymbol*) f);
5628 } else {
5629 _tmp100_ = FALSE(0);
5630 }
5631 if (_tmp100_) {
5632 BalaCCodeExpression* lhs_array_size = NULL((void*)0);
5633 BalaTargetValue* _tmp104_;
5634 BalaCCodeExpression* _tmp105_;
5635 BalaCCodeExpression* _tmp106_;
5636 BalaCCodeExpression* rhs_array_len = NULL((void*)0);
5637 BalaTargetValue* _tmp107_;
5638 BalaCCodeExpression* _tmp108_;
5639 BalaCCodeFunction* _tmp109_;
5640 BalaCCodeFunction* _tmp110_;
5641 BalaCCodeExpression* _tmp111_;
5642 BalaCCodeExpression* _tmp112_;
5643 _tmp104_ = field_value;
5644 _tmp105_ = bala_get_array_size_cvalue (_tmp104_);
5645 _tmp106_ = _bala_ccode_node_ref0 (_tmp105_);
5646 lhs_array_size = _tmp106_;
5647 _tmp107_ = field_value;
5648 _tmp108_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp107_, 1);
5649 rhs_array_len = _tmp108_;
5650 _tmp109_ = bala_ccode_base_module_get_ccode (self);
5651 _tmp110_ = _tmp109_;
5652 _tmp111_ = lhs_array_size;
5653 _tmp112_ = rhs_array_len;
5654 bala_ccode_function_add_assignment (_tmp110_, _tmp111_, _tmp112_);
5655 _bala_ccode_node_unref0 (rhs_array_len)((rhs_array_len == ((void*)0)) ? ((void*)0) : (rhs_array_len =
(bala_ccode_node_unref (rhs_array_len), ((void*)0))))
;
5656 _bala_ccode_node_unref0 (lhs_array_size)((lhs_array_size == ((void*)0)) ? ((void*)0) : (lhs_array_size
= (bala_ccode_node_unref (lhs_array_size), ((void*)0))))
;
5657 }
5658 _bala_target_value_unref0 (glib_value)((glib_value == ((void*)0)) ? ((void*)0) : (glib_value = (bala_target_value_unref
(glib_value), ((void*)0))))
;
5659 _bala_target_value_unref0 (field_value)((field_value == ((void*)0)) ? ((void*)0) : (field_value = (bala_target_value_unref
(field_value), ((void*)0))))
;
5660 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
5661 } else {
5662 if (bala_get_ccode_delegate_target ((BalaCodeNode*) f)) {
5663 BalaDelegateType* delegate_type = NULL((void*)0);
5664 BalaDataType* _tmp113_;
5665 BalaDataType* _tmp114_;
5666 BalaDelegateType* _tmp115_;
5667 BalaDelegateType* _tmp116_;
5668 BalaDelegate* _tmp117_;
5669 BalaDelegate* _tmp118_;
5670 gboolean _tmp119_;
5671 gboolean _tmp120_;
5672 _tmp113_ = bala_variable_get_variable_type ((BalaVariable*) f);
5673 _tmp114_ = _tmp113_;
5674 _tmp115_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp114_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp114_), ((bala_delegate_type_get_type ())))))
);
5675 delegate_type = _tmp115_;
5676 _tmp116_ = delegate_type;
5677 _tmp117_ = bala_delegate_type_get_delegate_symbol (_tmp116_);
5678 _tmp118_ = _tmp117_;
5679 _tmp119_ = bala_delegate_get_has_target (_tmp118_);
5680 _tmp120_ = _tmp119_;
5681 if (_tmp120_) {
5682 BalaTargetValue* field_value = NULL((void*)0);
5683 BalaSymbol* _tmp121_;
5684 BalaSymbol* _tmp122_;
5685 BalaTargetValue* _tmp123_;
5686 BalaTargetValue* _tmp124_;
5687 BalaTargetValue* _tmp125_;
5688 BalaTargetValue* _tmp126_;
5689 BalaCCodeFunction* _tmp127_;
5690 BalaCCodeFunction* _tmp128_;
5691 BalaTargetValue* _tmp129_;
5692 BalaCCodeExpression* _tmp130_;
5693 BalaCCodeExpression* _tmp131_;
5694 BalaCCodeIdentifier* _tmp132_;
5695 BalaCCodeIdentifier* _tmp133_;
5696 BalaDelegateType* _tmp134_;
5697 _tmp121_ = bala_symbol_get_parent_symbol ((BalaSymbol*) f);
5698 _tmp122_ = _tmp121_;
5699 _tmp123_ = bala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp122_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp122_), ((bala_typesymbol_get_type ())))))
);
5700 _tmp124_ = _tmp123_;
5701 _tmp125_ = bala_ccode_base_module_get_field_cvalue (self, f, _tmp124_);
5702 _tmp126_ = _tmp125_;
5703 _bala_target_value_unref0 (_tmp124_)((_tmp124_ == ((void*)0)) ? ((void*)0) : (_tmp124_ = (bala_target_value_unref
(_tmp124_), ((void*)0))))
;
5704 field_value = _tmp126_;
5705 _tmp127_ = bala_ccode_base_module_get_ccode (self);
5706 _tmp128_ = _tmp127_;
5707 _tmp129_ = field_value;
5708 _tmp130_ = bala_ccode_base_module_get_delegate_target_cvalue (self, _tmp129_);
5709 _tmp131_ = _tmp130_;
5710 _tmp132_ = bala_ccode_identifier_new ("self");
5711 _tmp133_ = _tmp132_;
5712 bala_ccode_function_add_assignment (_tmp128_, _tmp131_, (BalaCCodeExpression*) _tmp133_);
5713 _bala_ccode_node_unref0 (_tmp133_)((_tmp133_ == ((void*)0)) ? ((void*)0) : (_tmp133_ = (bala_ccode_node_unref
(_tmp133_), ((void*)0))))
;
5714 _bala_ccode_node_unref0 (_tmp131_)((_tmp131_ == ((void*)0)) ? ((void*)0) : (_tmp131_ = (bala_ccode_node_unref
(_tmp131_), ((void*)0))))
;
5715 _tmp134_ = delegate_type;
5716 if (bala_data_type_is_disposable ((BalaDataType*) _tmp134_)) {
5717 BalaCCodeFunction* _tmp135_;
5718 BalaCCodeFunction* _tmp136_;
5719 BalaTargetValue* _tmp137_;
5720 BalaCCodeExpression* _tmp138_;
5721 BalaCCodeExpression* _tmp139_;
5722 BalaCCodeConstant* _tmp140_;
5723 BalaCCodeConstant* _tmp141_;
5724 _tmp135_ = bala_ccode_base_module_get_ccode (self);
5725 _tmp136_ = _tmp135_;
5726 _tmp137_ = field_value;
5727 _tmp138_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp137_);
5728 _tmp139_ = _tmp138_;
5729 _tmp140_ = bala_ccode_constant_new ("NULL");
5730 _tmp141_ = _tmp140_;
5731 bala_ccode_function_add_assignment (_tmp136_, _tmp139_, (BalaCCodeExpression*) _tmp141_);
5732 _bala_ccode_node_unref0 (_tmp141_)((_tmp141_ == ((void*)0)) ? ((void*)0) : (_tmp141_ = (bala_ccode_node_unref
(_tmp141_), ((void*)0))))
;
5733 _bala_ccode_node_unref0 (_tmp139_)((_tmp139_ == ((void*)0)) ? ((void*)0) : (_tmp139_ = (bala_ccode_node_unref
(_tmp139_), ((void*)0))))
;
5734 }
5735 _bala_target_value_unref0 (field_value)((field_value == ((void*)0)) ? ((void*)0) : (field_value = (bala_target_value_unref
(field_value), ((void*)0))))
;
5736 }
5737 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
5738 }
5739 }
5740 }
5741 {
5742 BalaArrayList* _value_list = NULL((void*)0);
5743 BalaArrayList* _tmp142_;
5744 BalaArrayList* _tmp143_;
5745 BalaArrayList* _tmp144_;
5746 gint _value_size = 0;
5747 BalaArrayList* _tmp145_;
5748 gint _tmp146_;
5749 gint _tmp147_;
5750 gint _value_index = 0;
5751 _tmp142_ = bala_ccode_base_module_get_temp_ref_values (self);
5752 _tmp143_ = _tmp142_;
5753 _tmp144_ = _bala_iterable_ref0 (_tmp143_);
5754 _value_list = _tmp144_;
5755 _tmp145_ = _value_list;
5756 _tmp146_ = bala_collection_get_size ((BalaCollection*) _tmp145_);
5757 _tmp147_ = _tmp146_;
5758 _value_size = _tmp147_;
5759 _value_index = -1;
5760 while (TRUE(!(0))) {
5761 gint _tmp148_;
5762 gint _tmp149_;
5763 BalaTargetValue* value = NULL((void*)0);
5764 BalaArrayList* _tmp150_;
5765 gpointer _tmp151_;
5766 BalaCCodeFunction* _tmp152_;
5767 BalaCCodeFunction* _tmp153_;
5768 BalaTargetValue* _tmp154_;
5769 BalaCCodeExpression* _tmp155_;
5770 BalaCCodeExpression* _tmp156_;
5771 _value_index = _value_index + 1;
5772 _tmp148_ = _value_index;
5773 _tmp149_ = _value_size;
5774 if (!(_tmp148_ < _tmp149_)) {
5775 break;
5776 }
5777 _tmp150_ = _value_list;
5778 _tmp151_ = bala_list_get ((BalaList*) _tmp150_, _value_index);
5779 value = (BalaTargetValue*) _tmp151_;
5780 _tmp152_ = bala_ccode_base_module_get_ccode (self);
5781 _tmp153_ = _tmp152_;
5782 _tmp154_ = value;
5783 _tmp155_ = bala_ccode_base_module_destroy_value (self, _tmp154_, FALSE(0));
5784 _tmp156_ = _tmp155_;
5785 bala_ccode_function_add_expression (_tmp153_, _tmp156_);
5786 _bala_ccode_node_unref0 (_tmp156_)((_tmp156_ == ((void*)0)) ? ((void*)0) : (_tmp156_ = (bala_ccode_node_unref
(_tmp156_), ((void*)0))))
;
5787 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
5788 }
5789 _bala_iterable_unref0 (_value_list)((_value_list == ((void*)0)) ? ((void*)0) : (_value_list = (bala_iterable_unref
(_value_list), ((void*)0))))
;
5790 }
5791 _tmp157_ = bala_ccode_base_module_get_temp_ref_values (self);
5792 _tmp158_ = _tmp157_;
5793 bala_collection_clear ((BalaCollection*) _tmp158_);
5794 bala_ccode_base_module_pop_context (self);
5795 _bala_ccode_node_unref0 (rhs)((rhs == ((void*)0)) ? ((void*)0) : (rhs = (bala_ccode_node_unref
(rhs), ((void*)0))))
;
5796 }
5797 _tmp162_ = bala_variable_get_variable_type ((BalaVariable*) f);
5798 _tmp163_ = _tmp162_;
5799 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp163_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
5800 _tmp161_ = TRUE(!(0));
5801 } else {
5802 _tmp161_ = bala_get_ccode_delegate_target ((BalaCodeNode*) f);
5803 }
5804 if (_tmp161_) {
5805 BalaDataType* _tmp164_;
5806 BalaDataType* _tmp165_;
5807 _tmp164_ = bala_variable_get_variable_type ((BalaVariable*) f);
5808 _tmp165_ = _tmp164_;
5809 _tmp160_ = bala_ccode_base_module_requires_destroy (_tmp165_);
5810 } else {
5811 _tmp160_ = FALSE(0);
5812 }
5813 if (_tmp160_) {
5814 BalaCCodeBaseModuleEmitContext* _tmp166_;
5815 _tmp166_ = self->instance_finalize_context;
5816 _tmp159_ = _tmp166_ != NULL((void*)0);
5817 } else {
5818 _tmp159_ = FALSE(0);
5819 }
5820 if (_tmp159_) {
5821 BalaCCodeBaseModuleEmitContext* _tmp167_;
5822 BalaCCodeFunction* _tmp168_;
5823 BalaCCodeFunction* _tmp169_;
5824 BalaSymbol* _tmp170_;
5825 BalaSymbol* _tmp171_;
5826 BalaTargetValue* _tmp172_;
5827 BalaTargetValue* _tmp173_;
5828 BalaCCodeExpression* _tmp174_;
5829 BalaCCodeExpression* _tmp175_;
5830 _tmp167_ = self->instance_finalize_context;
5831 bala_ccode_base_module_push_context (self, _tmp167_);
5832 _tmp168_ = bala_ccode_base_module_get_ccode (self);
5833 _tmp169_ = _tmp168_;
5834 _tmp170_ = bala_symbol_get_parent_symbol ((BalaSymbol*) f);
5835 _tmp171_ = _tmp170_;
5836 _tmp172_ = bala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp171_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp171_), ((bala_typesymbol_get_type ())))))
);
5837 _tmp173_ = _tmp172_;
5838 _tmp174_ = bala_ccode_base_module_destroy_field (self, f, _tmp173_);
5839 _tmp175_ = _tmp174_;
5840 bala_ccode_function_add_expression (_tmp169_, _tmp175_);
5841 _bala_ccode_node_unref0 (_tmp175_)((_tmp175_ == ((void*)0)) ? ((void*)0) : (_tmp175_ = (bala_ccode_node_unref
(_tmp175_), ((void*)0))))
;
5842 _bala_target_value_unref0 (_tmp173_)((_tmp173_ == ((void*)0)) ? ((void*)0) : (_tmp173_ = (bala_target_value_unref
(_tmp173_), ((void*)0))))
;
5843 bala_ccode_base_module_pop_context (self);
5844 }
5845 } else {
5846 BalaMemberBinding _tmp176_;
5847 BalaMemberBinding _tmp177_;
5848 _tmp176_ = bala_field_get_binding (f);
5849 _tmp177_ = _tmp176_;
5850 if (_tmp177_ == BALA_MEMBER_BINDING_CLASS) {
5851 BalaSymbolAccessibility _tmp178_;
5852 BalaSymbolAccessibility _tmp179_;
5853 BalaExpression* _tmp199_;
5854 BalaExpression* _tmp200_;
5855 _tmp178_ = bala_symbol_get_access ((BalaSymbol*) f);
5856 _tmp179_ = _tmp178_;
5857 if (_tmp179_ == BALA_SYMBOL_ACCESSIBILITY_PRIVATE) {
5858 BalaCCodeFunctionCall* ccall = NULL((void*)0);
5859 BalaClass* _tmp180_;
5860 gchar* _tmp181_;
5861 gchar* _tmp182_;
5862 BalaCCodeIdentifier* _tmp183_;
5863 BalaCCodeIdentifier* _tmp184_;
5864 BalaCCodeFunctionCall* _tmp185_;
5865 BalaCCodeFunctionCall* _tmp186_;
5866 BalaCCodeFunctionCall* _tmp187_;
5867 BalaCCodeIdentifier* _tmp188_;
5868 BalaCCodeIdentifier* _tmp189_;
5869 BalaCCodeFunctionCall* _tmp190_;
5870 gchar* _tmp191_;
5871 gchar* _tmp192_;
5872 BalaCCodeMemberAccess* _tmp193_;
5873 _tmp180_ = cl;
5874 _tmp181_ = bala_get_ccode_class_get_private_function (_tmp180_);
5875 _tmp182_ = _tmp181_;
5876 _tmp183_ = bala_ccode_identifier_new (_tmp182_);
5877 _tmp184_ = _tmp183_;
5878 _tmp185_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp184_);
5879 _tmp186_ = _tmp185_;
5880 _bala_ccode_node_unref0 (_tmp184_)((_tmp184_ == ((void*)0)) ? ((void*)0) : (_tmp184_ = (bala_ccode_node_unref
(_tmp184_), ((void*)0))))
;
5881 _g_free0 (_tmp182_)(_tmp182_ = (g_free (_tmp182_), ((void*)0)));
5882 ccall = _tmp186_;
5883 _tmp187_ = ccall;
5884 _tmp188_ = bala_ccode_identifier_new ("klass");
5885 _tmp189_ = _tmp188_;
5886 bala_ccode_function_call_add_argument (_tmp187_, (BalaCCodeExpression*) _tmp189_);
5887 _bala_ccode_node_unref0 (_tmp189_)((_tmp189_ == ((void*)0)) ? ((void*)0) : (_tmp189_ = (bala_ccode_node_unref
(_tmp189_), ((void*)0))))
;
5888 _tmp190_ = ccall;
5889 _tmp191_ = bala_get_ccode_name ((BalaCodeNode*) f);
5890 _tmp192_ = _tmp191_;
5891 _tmp193_ = bala_ccode_member_access_new ((BalaCCodeExpression*) _tmp190_, _tmp192_, TRUE(!(0)));
5892 _bala_ccode_node_unref0 (lhs)((lhs == ((void*)0)) ? ((void*)0) : (lhs = (bala_ccode_node_unref
(lhs), ((void*)0))))
;
5893 lhs = (BalaCCodeExpression*) _tmp193_;
5894 _g_free0 (_tmp192_)(_tmp192_ = (g_free (_tmp192_), ((void*)0)));
5895 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
5896 } else {
5897 BalaCCodeIdentifier* _tmp194_;
5898 BalaCCodeIdentifier* _tmp195_;
5899 gchar* _tmp196_;
5900 gchar* _tmp197_;
5901 BalaCCodeMemberAccess* _tmp198_;
5902 _tmp194_ = bala_ccode_identifier_new ("klass");
5903 _tmp195_ = _tmp194_;
5904 _tmp196_ = bala_get_ccode_name ((BalaCodeNode*) f);
5905 _tmp197_ = _tmp196_;
5906 _tmp198_ = bala_ccode_member_access_new ((BalaCCodeExpression*) _tmp195_, _tmp197_, TRUE(!(0)));
5907 _bala_ccode_node_unref0 (lhs)((lhs == ((void*)0)) ? ((void*)0) : (lhs = (bala_ccode_node_unref
(lhs), ((void*)0))))
;
5908 lhs = (BalaCCodeExpression*) _tmp198_;
5909 _g_free0 (_tmp197_)(_tmp197_ = (g_free (_tmp197_), ((void*)0)));
5910 _bala_ccode_node_unref0 (_tmp195_)((_tmp195_ == ((void*)0)) ? ((void*)0) : (_tmp195_ = (bala_ccode_node_unref
(_tmp195_), ((void*)0))))
;
5911 }
5912 _tmp199_ = bala_variable_get_initializer ((BalaVariable*) f);
5913 _tmp200_ = _tmp199_;
5914 if (_tmp200_ != NULL((void*)0)) {
5915 BalaCCodeBaseModuleEmitContext* _tmp201_;
5916 BalaExpression* _tmp202_;
5917 BalaExpression* _tmp203_;
5918 BalaCCodeExpression* rhs = NULL((void*)0);
5919 BalaExpression* _tmp204_;
5920 BalaExpression* _tmp205_;
5921 BalaCCodeExpression* _tmp206_;
5922 BalaCCodeExpression* _tmp207_;
5923 BalaCCodeFunction* _tmp208_;
5924 BalaCCodeFunction* _tmp209_;
5925 BalaCCodeExpression* _tmp210_;
5926 BalaCCodeExpression* _tmp211_;
5927 BalaArrayList* _tmp227_;
5928 BalaArrayList* _tmp228_;
5929 _tmp201_ = self->class_init_context;
5930 bala_ccode_base_module_push_context (self, _tmp201_);
5931 _tmp202_ = bala_variable_get_initializer ((BalaVariable*) f);
5932 _tmp203_ = _tmp202_;
5933 bala_code_node_emit ((BalaCodeNode*) _tmp203_, (BalaCodeGenerator*) self);
5934 _tmp204_ = bala_variable_get_initializer ((BalaVariable*) f);
5935 _tmp205_ = _tmp204_;
5936 _tmp206_ = bala_get_cvalue (_tmp205_);
5937 _tmp207_ = _bala_ccode_node_ref0 (_tmp206_);
5938 rhs = _tmp207_;
5939 _tmp208_ = bala_ccode_base_module_get_ccode (self);
5940 _tmp209_ = _tmp208_;
5941 _tmp210_ = lhs;
5942 _tmp211_ = rhs;
5943 bala_ccode_function_add_assignment (_tmp209_, _tmp210_, _tmp211_);
5944 {
5945 BalaArrayList* _value_list = NULL((void*)0);
5946 BalaArrayList* _tmp212_;
5947 BalaArrayList* _tmp213_;
5948 BalaArrayList* _tmp214_;
5949 gint _value_size = 0;
5950 BalaArrayList* _tmp215_;
5951 gint _tmp216_;
5952 gint _tmp217_;
5953 gint _value_index = 0;
5954 _tmp212_ = bala_ccode_base_module_get_temp_ref_values (self);
5955 _tmp213_ = _tmp212_;
5956 _tmp214_ = _bala_iterable_ref0 (_tmp213_);
5957 _value_list = _tmp214_;
5958 _tmp215_ = _value_list;
5959 _tmp216_ = bala_collection_get_size ((BalaCollection*) _tmp215_);
5960 _tmp217_ = _tmp216_;
5961 _value_size = _tmp217_;
5962 _value_index = -1;
5963 while (TRUE(!(0))) {
5964 gint _tmp218_;
5965 gint _tmp219_;
5966 BalaTargetValue* value = NULL((void*)0);
5967 BalaArrayList* _tmp220_;
5968 gpointer _tmp221_;
5969 BalaCCodeFunction* _tmp222_;
5970 BalaCCodeFunction* _tmp223_;
5971 BalaTargetValue* _tmp224_;
5972 BalaCCodeExpression* _tmp225_;
5973 BalaCCodeExpression* _tmp226_;
5974 _value_index = _value_index + 1;
5975 _tmp218_ = _value_index;
5976 _tmp219_ = _value_size;
5977 if (!(_tmp218_ < _tmp219_)) {
5978 break;
5979 }
5980 _tmp220_ = _value_list;
5981 _tmp221_ = bala_list_get ((BalaList*) _tmp220_, _value_index);
5982 value = (BalaTargetValue*) _tmp221_;
5983 _tmp222_ = bala_ccode_base_module_get_ccode (self);
5984 _tmp223_ = _tmp222_;
5985 _tmp224_ = value;
5986 _tmp225_ = bala_ccode_base_module_destroy_value (self, _tmp224_, FALSE(0));
5987 _tmp226_ = _tmp225_;
5988 bala_ccode_function_add_expression (_tmp223_, _tmp226_);
5989 _bala_ccode_node_unref0 (_tmp226_)((_tmp226_ == ((void*)0)) ? ((void*)0) : (_tmp226_ = (bala_ccode_node_unref
(_tmp226_), ((void*)0))))
;
5990 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
5991 }
5992 _bala_iterable_unref0 (_value_list)((_value_list == ((void*)0)) ? ((void*)0) : (_value_list = (bala_iterable_unref
(_value_list), ((void*)0))))
;
5993 }
5994 _tmp227_ = bala_ccode_base_module_get_temp_ref_values (self);
5995 _tmp228_ = _tmp227_;
5996 bala_collection_clear ((BalaCollection*) _tmp228_);
5997 bala_ccode_base_module_pop_context (self);
5998 _bala_ccode_node_unref0 (rhs)((rhs == ((void*)0)) ? ((void*)0) : (rhs = (bala_ccode_node_unref
(rhs), ((void*)0))))
;
5999 }
6000 } else {
6001 BalaCCodeFile* _tmp229_;
6002 gboolean _tmp232_;
6003 gboolean _tmp233_;
6004 _tmp229_ = self->cfile;
6005 bala_ccode_base_module_generate_field_declaration (self, f, _tmp229_);
6006 if (!bala_symbol_is_internal_symbol ((BalaSymbol*) f)) {
6007 BalaCCodeFile* _tmp230_;
6008 _tmp230_ = self->header_file;
6009 bala_ccode_base_module_generate_field_declaration (self, f, _tmp230_);
6010 }
6011 if (!bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
6012 BalaCCodeFile* _tmp231_;
6013 _tmp231_ = self->internal_header_file;
6014 bala_ccode_base_module_generate_field_declaration (self, f, _tmp231_);
6015 }
6016 _tmp232_ = bala_symbol_get_external ((BalaSymbol*) f);
6017 _tmp233_ = _tmp232_;
6018 if (!_tmp233_) {
6019 gchar* _tmp234_;
6020 gchar* _tmp235_;
6021 BalaCCodeIdentifier* _tmp236_;
6022 BalaCCodeVariableDeclarator* var_decl = NULL((void*)0);
6023 gchar* _tmp237_;
6024 gchar* _tmp238_;
6025 BalaDataType* _tmp239_;
6026 BalaDataType* _tmp240_;
6027 BalaCCodeDeclaratorSuffix* _tmp241_;
6028 BalaCCodeDeclaratorSuffix* _tmp242_;
6029 BalaCCodeVariableDeclarator* _tmp243_;
6030 BalaCCodeVariableDeclarator* _tmp244_;
6031 BalaCCodeVariableDeclarator* _tmp245_;
6032 BalaDataType* _tmp246_;
6033 BalaDataType* _tmp247_;
6034 BalaCCodeExpression* _tmp248_;
6035 BalaCCodeExpression* _tmp249_;
6036 BalaCCodeBaseModuleEmitContext* _tmp250_;
6037 BalaExpression* _tmp254_;
6038 BalaExpression* _tmp255_;
6039 BalaCCodeDeclaration* var_def = NULL((void*)0);
6040 BalaDataType* _tmp265_;
6041 BalaDataType* _tmp266_;
6042 gchar* _tmp267_;
6043 gchar* _tmp268_;
6044 BalaCCodeDeclaration* _tmp269_;
6045 BalaCCodeDeclaration* _tmp270_;
6046 BalaCCodeDeclaration* _tmp271_;
6047 BalaCCodeVariableDeclarator* _tmp272_;
6048 BalaVersionAttribute* _tmp275_;
6049 BalaVersionAttribute* _tmp276_;
6050 gboolean _tmp277_;
6051 gboolean _tmp278_;
6052 gboolean _tmp283_;
6053 gboolean _tmp284_;
6054 BalaCCodeFile* _tmp289_;
6055 BalaCCodeDeclaration* _tmp290_;
6056 gboolean _tmp291_ = FALSE(0);
6057 BalaDataType* _tmp292_;
6058 BalaDataType* _tmp293_;
6059 BalaExpression* _tmp378_;
6060 BalaExpression* _tmp379_;
6061 _tmp234_ = bala_get_ccode_name ((BalaCodeNode*) f);
6062 _tmp235_ = _tmp234_;
6063 _tmp236_ = bala_ccode_identifier_new (_tmp235_);
6064 _bala_ccode_node_unref0 (lhs)((lhs == ((void*)0)) ? ((void*)0) : (lhs = (bala_ccode_node_unref
(lhs), ((void*)0))))
;
6065 lhs = (BalaCCodeExpression*) _tmp236_;
6066 _g_free0 (_tmp235_)(_tmp235_ = (g_free (_tmp235_), ((void*)0)));
6067 _tmp237_ = bala_get_ccode_name ((BalaCodeNode*) f);
6068 _tmp238_ = _tmp237_;
6069 _tmp239_ = bala_variable_get_variable_type ((BalaVariable*) f);
6070 _tmp240_ = _tmp239_;
6071 _tmp241_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp240_);
6072 _tmp242_ = _tmp241_;
6073 _tmp243_ = bala_ccode_variable_declarator_new (_tmp238_, NULL((void*)0), _tmp242_);
6074 _tmp244_ = _tmp243_;
6075 _bala_ccode_declarator_suffix_unref0 (_tmp242_)((_tmp242_ == ((void*)0)) ? ((void*)0) : (_tmp242_ = (bala_ccode_declarator_suffix_unref
(_tmp242_), ((void*)0))))
;
6076 _g_free0 (_tmp238_)(_tmp238_ = (g_free (_tmp238_), ((void*)0)));
6077 var_decl = _tmp244_;
6078 _tmp245_ = var_decl;
6079 _tmp246_ = bala_variable_get_variable_type ((BalaVariable*) f);
6080 _tmp247_ = _tmp246_;
6081 _tmp248_ = bala_ccode_base_module_default_value_for_type (self, _tmp247_, TRUE(!(0)), FALSE(0));
6082 _tmp249_ = _tmp248_;
6083 bala_ccode_variable_declarator_set_initializer (_tmp245_, _tmp249_);
6084 _bala_ccode_node_unref0 (_tmp249_)((_tmp249_ == ((void*)0)) ? ((void*)0) : (_tmp249_ = (bala_ccode_node_unref
(_tmp249_), ((void*)0))))
;
6085 _tmp250_ = self->class_init_context;
6086 if (_tmp250_ != NULL((void*)0)) {
6087 BalaCCodeBaseModuleEmitContext* _tmp251_;
6088 _tmp251_ = self->class_init_context;
6089 bala_ccode_base_module_push_context (self, _tmp251_);
6090 } else {
6091 BalaCCodeBaseModuleEmitContext* _tmp252_;
6092 BalaCCodeBaseModuleEmitContext* _tmp253_;
6093 _tmp252_ = bala_ccode_base_module_emit_context_new (NULL((void*)0));
6094 _tmp253_ = _tmp252_;
6095 bala_ccode_base_module_push_context (self, _tmp253_);
6096 _bala_ccode_base_module_emit_context_unref0 (_tmp253_)((_tmp253_ == ((void*)0)) ? ((void*)0) : (_tmp253_ = (bala_ccode_base_module_emit_context_unref
(_tmp253_), ((void*)0))))
;
6097 }
6098 _tmp254_ = bala_variable_get_initializer ((BalaVariable*) f);
6099 _tmp255_ = _tmp254_;
6100 if (_tmp255_ != NULL((void*)0)) {
6101 BalaExpression* _tmp256_;
6102 BalaExpression* _tmp257_;
6103 BalaCCodeExpression* init = NULL((void*)0);
6104 BalaExpression* _tmp258_;
6105 BalaExpression* _tmp259_;
6106 BalaCCodeExpression* _tmp260_;
6107 BalaCCodeExpression* _tmp261_;
6108 BalaCCodeExpression* _tmp262_;
6109 _tmp256_ = bala_variable_get_initializer ((BalaVariable*) f);
6110 _tmp257_ = _tmp256_;
6111 bala_code_node_emit ((BalaCodeNode*) _tmp257_, (BalaCodeGenerator*) self);
6112 _tmp258_ = bala_variable_get_initializer ((BalaVariable*) f);
6113 _tmp259_ = _tmp258_;
6114 _tmp260_ = bala_get_cvalue (_tmp259_);
6115 _tmp261_ = _bala_ccode_node_ref0 (_tmp260_);
6116 init = _tmp261_;
6117 _tmp262_ = init;
6118 if (bala_ccode_base_module_is_constant_ccode_expression (_tmp262_)) {
6119 BalaCCodeVariableDeclarator* _tmp263_;
6120 BalaCCodeExpression* _tmp264_;
6121 _tmp263_ = var_decl;
6122 _tmp264_ = init;
6123 bala_ccode_variable_declarator_set_initializer (_tmp263_, _tmp264_);
6124 }
6125 _bala_ccode_node_unref0 (init)((init == ((void*)0)) ? ((void*)0) : (init = (bala_ccode_node_unref
(init), ((void*)0))))
;
6126 }
6127 _tmp265_ = bala_variable_get_variable_type ((BalaVariable*) f);
6128 _tmp266_ = _tmp265_;
6129 _tmp267_ = bala_get_ccode_name ((BalaCodeNode*) _tmp266_);
6130 _tmp268_ = _tmp267_;
6131 _tmp269_ = bala_ccode_declaration_new (_tmp268_);
6132 _tmp270_ = _tmp269_;
6133 _g_free0 (_tmp268_)(_tmp268_ = (g_free (_tmp268_), ((void*)0)));
6134 var_def = _tmp270_;
6135 _tmp271_ = var_def;
6136 _tmp272_ = var_decl;
6137 bala_ccode_declaration_add_declarator (_tmp271_, (BalaCCodeDeclarator*) _tmp272_);
6138 if (!bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
6139 BalaCCodeDeclaration* _tmp273_;
6140 _tmp273_ = var_def;
6141 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp273_, BALA_CCODE_MODIFIERS_EXTERN);
6142 } else {
6143 BalaCCodeDeclaration* _tmp274_;
6144 _tmp274_ = var_def;
6145 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp274_, BALA_CCODE_MODIFIERS_STATIC);
6146 }
6147 _tmp275_ = bala_symbol_get_version ((BalaSymbol*) f);
6148 _tmp276_ = _tmp275_;
6149 _tmp277_ = bala_version_attribute_get_deprecated (_tmp276_);
6150 _tmp278_ = _tmp277_;
6151 if (_tmp278_) {
6152 BalaCCodeDeclaration* _tmp279_;
6153 BalaCCodeDeclaration* _tmp280_;
6154 BalaCCodeModifiers _tmp281_;
6155 BalaCCodeModifiers _tmp282_;
6156 _tmp279_ = var_def;
6157 _tmp280_ = var_def;
6158 _tmp281_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp280_);
6159 _tmp282_ = _tmp281_;
6160 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp280_, _tmp282_ | BALA_CCODE_MODIFIERS_DEPRECATED);
6161 }
6162 _tmp283_ = bala_field_get_is_volatile (f);
6163 _tmp284_ = _tmp283_;
6164 if (_tmp284_) {
6165 BalaCCodeDeclaration* _tmp285_;
6166 BalaCCodeDeclaration* _tmp286_;
6167 BalaCCodeModifiers _tmp287_;
6168 BalaCCodeModifiers _tmp288_;
6169 _tmp285_ = var_def;
6170 _tmp286_ = var_def;
6171 _tmp287_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp286_);
6172 _tmp288_ = _tmp287_;
6173 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp286_, _tmp288_ | BALA_CCODE_MODIFIERS_VOLATILE);
6174 }
6175 _tmp289_ = self->cfile;
6176 _tmp290_ = var_def;
6177 bala_ccode_file_add_type_member_declaration (_tmp289_, (BalaCCodeNode*) _tmp290_);
6178 _tmp292_ = bala_variable_get_variable_type ((BalaVariable*) f);
6179 _tmp293_ = _tmp292_;
6180 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp293_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp293_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6181 _tmp291_ = bala_get_ccode_array_length ((BalaCodeNode*) f);
6182 } else {
6183 _tmp291_ = FALSE(0);
6184 }
6185 if (_tmp291_) {
6186 BalaArrayType* array_type = NULL((void*)0);
6187 BalaDataType* _tmp294_;
6188 BalaDataType* _tmp295_;
6189 BalaArrayType* _tmp296_;
6190 BalaArrayType* _tmp297_;
6191 gboolean _tmp298_;
6192 gboolean _tmp299_;
6193 _tmp294_ = bala_variable_get_variable_type ((BalaVariable*) f);
6194 _tmp295_ = _tmp294_;
6195 _tmp296_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp295_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp295_), ((bala_array_type_get_type ())))))
);
6196 array_type = _tmp296_;
6197 _tmp297_ = array_type;
6198 _tmp298_ = bala_array_type_get_fixed_length (_tmp297_);
6199 _tmp299_ = _tmp298_;
6200 if (!_tmp299_) {
6201 gchar* length_ctype = NULL((void*)0);
6202 gchar* _tmp300_;
6203 gboolean _tmp319_ = FALSE(0);
6204 BalaArrayType* _tmp320_;
6205 gint _tmp321_;
6206 gint _tmp322_;
6207 _tmp300_ = bala_get_ccode_array_length_type ((BalaCodeNode*) f);
6208 length_ctype = _tmp300_;
6209 {
6210 gint dim = 0;
6211 dim = 1;
6212 {
6213 gboolean _tmp301_ = FALSE(0);
6214 _tmp301_ = TRUE(!(0));
6215 while (TRUE(!(0))) {
6216 BalaArrayType* _tmp303_;
6217 gint _tmp304_;
6218 gint _tmp305_;
6219 BalaCCodeDeclaration* len_def = NULL((void*)0);
6220 const gchar* _tmp306_;
6221 BalaCCodeDeclaration* _tmp307_;
6222 BalaCCodeDeclaration* _tmp308_;
6223 gchar* _tmp309_;
6224 gchar* _tmp310_;
6225 BalaCCodeConstant* _tmp311_;
6226 BalaCCodeConstant* _tmp312_;
6227 BalaCCodeVariableDeclarator* _tmp313_;
6228 BalaCCodeVariableDeclarator* _tmp314_;
6229 BalaCCodeFile* _tmp317_;
6230 BalaCCodeDeclaration* _tmp318_;
6231 if (!_tmp301_) {
6232 gint _tmp302_;
6233 _tmp302_ = dim;
6234 dim = _tmp302_ + 1;
6235 }
6236 _tmp301_ = FALSE(0);
6237 _tmp303_ = array_type;
6238 _tmp304_ = bala_array_type_get_rank (_tmp303_);
6239 _tmp305_ = _tmp304_;
6240 if (!(dim <= _tmp305_)) {
6241 break;
6242 }
6243 _tmp306_ = length_ctype;
6244 _tmp307_ = bala_ccode_declaration_new (_tmp306_);
6245 len_def = _tmp307_;
6246 _tmp308_ = len_def;
6247 _tmp309_ = bala_ccode_base_module_get_variable_array_length_cname (self, (BalaVariable*) f, dim);
6248 _tmp310_ = _tmp309_;
6249 _tmp311_ = bala_ccode_constant_new ("0");
6250 _tmp312_ = _tmp311_;
6251 _tmp313_ = bala_ccode_variable_declarator_new (_tmp310_, (BalaCCodeExpression*) _tmp312_, NULL((void*)0));
6252 _tmp314_ = _tmp313_;
6253 bala_ccode_declaration_add_declarator (_tmp308_, (BalaCCodeDeclarator*) _tmp314_);
6254 _bala_ccode_node_unref0 (_tmp314_)((_tmp314_ == ((void*)0)) ? ((void*)0) : (_tmp314_ = (bala_ccode_node_unref
(_tmp314_), ((void*)0))))
;
6255 _bala_ccode_node_unref0 (_tmp312_)((_tmp312_ == ((void*)0)) ? ((void*)0) : (_tmp312_ = (bala_ccode_node_unref
(_tmp312_), ((void*)0))))
;
6256 _g_free0 (_tmp310_)(_tmp310_ = (g_free (_tmp310_), ((void*)0)));
6257 if (!bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
6258 BalaCCodeDeclaration* _tmp315_;
6259 _tmp315_ = len_def;
6260 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp315_, BALA_CCODE_MODIFIERS_EXTERN);
6261 } else {
6262 BalaCCodeDeclaration* _tmp316_;
6263 _tmp316_ = len_def;
6264 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp316_, BALA_CCODE_MODIFIERS_STATIC);
6265 }
6266 _tmp317_ = self->cfile;
6267 _tmp318_ = len_def;
6268 bala_ccode_file_add_type_member_declaration (_tmp317_, (BalaCCodeNode*) _tmp318_);
6269 _bala_ccode_node_unref0 (len_def)((len_def == ((void*)0)) ? ((void*)0) : (len_def = (bala_ccode_node_unref
(len_def), ((void*)0))))
;
6270 }
6271 }
6272 }
6273 _tmp320_ = array_type;
6274 _tmp321_ = bala_array_type_get_rank (_tmp320_);
6275 _tmp322_ = _tmp321_;
6276 if (_tmp322_ == 1) {
6277 _tmp319_ = bala_symbol_is_internal_symbol ((BalaSymbol*) f);
6278 } else {
6279 _tmp319_ = FALSE(0);
6280 }
6281 if (_tmp319_) {
6282 BalaCCodeDeclaration* _cdecl_ = NULL((void*)0);
6283 const gchar* _tmp323_;
6284 BalaCCodeDeclaration* _tmp324_;
6285 BalaCCodeDeclaration* _tmp325_;
6286 gchar* _tmp326_;
6287 gchar* _tmp327_;
6288 gchar* _tmp328_;
6289 gchar* _tmp329_;
6290 BalaCCodeConstant* _tmp330_;
6291 BalaCCodeConstant* _tmp331_;
6292 BalaCCodeVariableDeclarator* _tmp332_;
6293 BalaCCodeVariableDeclarator* _tmp333_;
6294 BalaCCodeDeclaration* _tmp334_;
6295 BalaCCodeFile* _tmp335_;
6296 BalaCCodeDeclaration* _tmp336_;
6297 _tmp323_ = length_ctype;
6298 _tmp324_ = bala_ccode_declaration_new (_tmp323_);
6299 _cdecl_ = _tmp324_;
6300 _tmp325_ = _cdecl_;
6301 _tmp326_ = bala_get_ccode_name ((BalaCodeNode*) f);
6302 _tmp327_ = _tmp326_;
6303 _tmp328_ = bala_ccode_base_module_get_array_size_cname (self, _tmp327_);
6304 _tmp329_ = _tmp328_;
6305 _tmp330_ = bala_ccode_constant_new ("0");
6306 _tmp331_ = _tmp330_;
6307 _tmp332_ = bala_ccode_variable_declarator_new (_tmp329_, (BalaCCodeExpression*) _tmp331_, NULL((void*)0));
6308 _tmp333_ = _tmp332_;
6309 bala_ccode_declaration_add_declarator (_tmp325_, (BalaCCodeDeclarator*) _tmp333_);
6310 _bala_ccode_node_unref0 (_tmp333_)((_tmp333_ == ((void*)0)) ? ((void*)0) : (_tmp333_ = (bala_ccode_node_unref
(_tmp333_), ((void*)0))))
;
6311 _bala_ccode_node_unref0 (_tmp331_)((_tmp331_ == ((void*)0)) ? ((void*)0) : (_tmp331_ = (bala_ccode_node_unref
(_tmp331_), ((void*)0))))
;
6312 _g_free0 (_tmp329_)(_tmp329_ = (g_free (_tmp329_), ((void*)0)));
6313 _g_free0 (_tmp327_)(_tmp327_ = (g_free (_tmp327_), ((void*)0)));
6314 _tmp334_ = _cdecl_;
6315 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp334_, BALA_CCODE_MODIFIERS_STATIC);
6316 _tmp335_ = self->cfile;
6317 _tmp336_ = _cdecl_;
6318 bala_ccode_file_add_type_member_declaration (_tmp335_, (BalaCCodeNode*) _tmp336_);
6319 _bala_ccode_node_unref0 (_cdecl_)((_cdecl_ == ((void*)0)) ? ((void*)0) : (_cdecl_ = (bala_ccode_node_unref
(_cdecl_), ((void*)0))))
;
6320 }
6321 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
6322 }
6323 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
6324 } else {
6325 if (bala_get_ccode_delegate_target ((BalaCodeNode*) f)) {
6326 BalaDelegateType* delegate_type = NULL((void*)0);
6327 BalaDataType* _tmp337_;
6328 BalaDataType* _tmp338_;
6329 BalaDelegateType* _tmp339_;
6330 BalaDelegateType* _tmp340_;
6331 BalaDelegate* _tmp341_;
6332 BalaDelegate* _tmp342_;
6333 gboolean _tmp343_;
6334 gboolean _tmp344_;
6335 _tmp337_ = bala_variable_get_variable_type ((BalaVariable*) f);
6336 _tmp338_ = _tmp337_;
6337 _tmp339_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp338_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp338_), ((bala_delegate_type_get_type ())))))
);
6338 delegate_type = _tmp339_;
6339 _tmp340_ = delegate_type;
6340 _tmp341_ = bala_delegate_type_get_delegate_symbol (_tmp340_);
6341 _tmp342_ = _tmp341_;
6342 _tmp343_ = bala_delegate_get_has_target (_tmp342_);
6343 _tmp344_ = _tmp343_;
6344 if (_tmp344_) {
6345 BalaCCodeDeclaration* target_def = NULL((void*)0);
6346 BalaDataType* _tmp345_;
6347 gchar* _tmp346_;
6348 gchar* _tmp347_;
6349 BalaCCodeDeclaration* _tmp348_;
6350 BalaCCodeDeclaration* _tmp349_;
6351 BalaCCodeDeclaration* _tmp350_;
6352 gchar* _tmp351_;
6353 gchar* _tmp352_;
6354 BalaCCodeConstant* _tmp353_;
6355 BalaCCodeConstant* _tmp354_;
6356 BalaCCodeVariableDeclarator* _tmp355_;
6357 BalaCCodeVariableDeclarator* _tmp356_;
6358 BalaCCodeFile* _tmp359_;
6359 BalaCCodeDeclaration* _tmp360_;
6360 BalaDelegateType* _tmp361_;
6361 _tmp345_ = self->delegate_target_type;
6362 _tmp346_ = bala_get_ccode_name ((BalaCodeNode*) _tmp345_);
6363 _tmp347_ = _tmp346_;
6364 _tmp348_ = bala_ccode_declaration_new (_tmp347_);
6365 _tmp349_ = _tmp348_;
6366 _g_free0 (_tmp347_)(_tmp347_ = (g_free (_tmp347_), ((void*)0)));
6367 target_def = _tmp349_;
6368 _tmp350_ = target_def;
6369 _tmp351_ = bala_get_ccode_delegate_target_name ((BalaVariable*) f);
6370 _tmp352_ = _tmp351_;
6371 _tmp353_ = bala_ccode_constant_new ("NULL");
6372 _tmp354_ = _tmp353_;
6373 _tmp355_ = bala_ccode_variable_declarator_new (_tmp352_, (BalaCCodeExpression*) _tmp354_, NULL((void*)0));
6374 _tmp356_ = _tmp355_;
6375 bala_ccode_declaration_add_declarator (_tmp350_, (BalaCCodeDeclarator*) _tmp356_);
6376 _bala_ccode_node_unref0 (_tmp356_)((_tmp356_ == ((void*)0)) ? ((void*)0) : (_tmp356_ = (bala_ccode_node_unref
(_tmp356_), ((void*)0))))
;
6377 _bala_ccode_node_unref0 (_tmp354_)((_tmp354_ == ((void*)0)) ? ((void*)0) : (_tmp354_ = (bala_ccode_node_unref
(_tmp354_), ((void*)0))))
;
6378 _g_free0 (_tmp352_)(_tmp352_ = (g_free (_tmp352_), ((void*)0)));
6379 if (!bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
6380 BalaCCodeDeclaration* _tmp357_;
6381 _tmp357_ = target_def;
6382 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp357_, BALA_CCODE_MODIFIERS_EXTERN);
6383 } else {
6384 BalaCCodeDeclaration* _tmp358_;
6385 _tmp358_ = target_def;
6386 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp358_, BALA_CCODE_MODIFIERS_STATIC);
6387 }
6388 _tmp359_ = self->cfile;
6389 _tmp360_ = target_def;
6390 bala_ccode_file_add_type_member_declaration (_tmp359_, (BalaCCodeNode*) _tmp360_);
6391 _tmp361_ = delegate_type;
6392 if (bala_data_type_is_disposable ((BalaDataType*) _tmp361_)) {
6393 BalaCCodeDeclaration* target_destroy_notify_def = NULL((void*)0);
6394 BalaDelegateType* _tmp362_;
6395 gchar* _tmp363_;
6396 gchar* _tmp364_;
6397 BalaCCodeDeclaration* _tmp365_;
6398 BalaCCodeDeclaration* _tmp366_;
6399 BalaCCodeDeclaration* _tmp367_;
6400 gchar* _tmp368_;
6401 gchar* _tmp369_;
6402 BalaCCodeConstant* _tmp370_;
6403 BalaCCodeConstant* _tmp371_;
6404 BalaCCodeVariableDeclarator* _tmp372_;
6405 BalaCCodeVariableDeclarator* _tmp373_;
6406 BalaCCodeFile* _tmp376_;
6407 BalaCCodeDeclaration* _tmp377_;
6408 _tmp362_ = self->delegate_target_destroy_type;
6409 _tmp363_ = bala_get_ccode_name ((BalaCodeNode*) _tmp362_);
6410 _tmp364_ = _tmp363_;
6411 _tmp365_ = bala_ccode_declaration_new (_tmp364_);
6412 _tmp366_ = _tmp365_;
6413 _g_free0 (_tmp364_)(_tmp364_ = (g_free (_tmp364_), ((void*)0)));
6414 target_destroy_notify_def = _tmp366_;
6415 _tmp367_ = target_destroy_notify_def;
6416 _tmp368_ = bala_get_ccode_delegate_target_destroy_notify_name ((BalaVariable*) f);
6417 _tmp369_ = _tmp368_;
6418 _tmp370_ = bala_ccode_constant_new ("NULL");
6419 _tmp371_ = _tmp370_;
6420 _tmp372_ = bala_ccode_variable_declarator_new (_tmp369_, (BalaCCodeExpression*) _tmp371_, NULL((void*)0));
6421 _tmp373_ = _tmp372_;
6422 bala_ccode_declaration_add_declarator (_tmp367_, (BalaCCodeDeclarator*) _tmp373_);
6423 _bala_ccode_node_unref0 (_tmp373_)((_tmp373_ == ((void*)0)) ? ((void*)0) : (_tmp373_ = (bala_ccode_node_unref
(_tmp373_), ((void*)0))))
;
6424 _bala_ccode_node_unref0 (_tmp371_)((_tmp371_ == ((void*)0)) ? ((void*)0) : (_tmp371_ = (bala_ccode_node_unref
(_tmp371_), ((void*)0))))
;
6425 _g_free0 (_tmp369_)(_tmp369_ = (g_free (_tmp369_), ((void*)0)));
6426 if (!bala_symbol_is_private_symbol ((BalaSymbol*) f)) {
6427 BalaCCodeDeclaration* _tmp374_;
6428 _tmp374_ = target_destroy_notify_def;
6429 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp374_, BALA_CCODE_MODIFIERS_EXTERN);
6430 } else {
6431 BalaCCodeDeclaration* _tmp375_;
6432 _tmp375_ = target_destroy_notify_def;
6433 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp375_, BALA_CCODE_MODIFIERS_STATIC);
6434 }
6435 _tmp376_ = self->cfile;
6436 _tmp377_ = target_destroy_notify_def;
6437 bala_ccode_file_add_type_member_declaration (_tmp376_, (BalaCCodeNode*) _tmp377_);
6438 _bala_ccode_node_unref0 (target_destroy_notify_def)((target_destroy_notify_def == ((void*)0)) ? ((void*)0) : (target_destroy_notify_def
= (bala_ccode_node_unref (target_destroy_notify_def), ((void
*)0))))
;
6439 }
6440 _bala_ccode_node_unref0 (target_def)((target_def == ((void*)0)) ? ((void*)0) : (target_def = (bala_ccode_node_unref
(target_def), ((void*)0))))
;
6441 }
6442 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
6443 }
6444 }
6445 _tmp378_ = bala_variable_get_initializer ((BalaVariable*) f);
6446 _tmp379_ = _tmp378_;
6447 if (_tmp379_ != NULL((void*)0)) {
6448 BalaCCodeExpression* rhs = NULL((void*)0);
6449 BalaExpression* _tmp380_;
6450 BalaExpression* _tmp381_;
6451 BalaCCodeExpression* _tmp382_;
6452 BalaCCodeExpression* _tmp383_;
6453 BalaCCodeExpression* _tmp384_;
6454 _tmp380_ = bala_variable_get_initializer ((BalaVariable*) f);
6455 _tmp381_ = _tmp380_;
6456 _tmp382_ = bala_get_cvalue (_tmp381_);
6457 _tmp383_ = _bala_ccode_node_ref0 (_tmp382_);
6458 rhs = _tmp383_;
6459 _tmp384_ = rhs;
6460 if (!bala_ccode_base_module_is_constant_ccode_expression (_tmp384_)) {
6461 if (is_gtypeinstance) {
6462 BalaExpression* _tmp385_;
6463 BalaExpression* _tmp386_;
6464 gboolean _tmp422_ = FALSE(0);
6465 BalaDataType* _tmp423_;
6466 BalaDataType* _tmp424_;
6467 _tmp385_ = bala_variable_get_initializer ((BalaVariable*) f);
6468 _tmp386_ = _tmp385_;
6469 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp386_, BALA_TYPE_INITIALIZER_LIST)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp386_); GType __t = ((bala_initializer_list_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
6470 BalaCCodeFunction* _tmp387_;
6471 BalaCCodeFunction* _tmp388_;
6472 BalaLocalVariable* temp_decl = NULL((void*)0);
6473 BalaDataType* _tmp389_;
6474 BalaDataType* _tmp390_;
6475 BalaLocalVariable* _tmp391_;
6476 BalaCCodeVariableDeclarator* vardecl = NULL((void*)0);
6477 BalaLocalVariable* _tmp392_;
6478 const gchar* _tmp393_;
6479 const gchar* _tmp394_;
6480 BalaCCodeExpression* _tmp395_;
6481 BalaCCodeVariableDeclarator* _tmp396_;
6482 BalaCCodeFunction* _tmp397_;
6483 BalaCCodeFunction* _tmp398_;
6484 BalaLocalVariable* _tmp399_;
6485 BalaDataType* _tmp400_;
6486 BalaDataType* _tmp401_;
6487 gchar* _tmp402_;
6488 gchar* _tmp403_;
6489 BalaCCodeVariableDeclarator* _tmp404_;
6490 BalaCCodeExpression* tmp = NULL((void*)0);
6491 BalaLocalVariable* _tmp405_;
6492 const gchar* _tmp406_;
6493 const gchar* _tmp407_;
6494 gchar* _tmp408_;
6495 gchar* _tmp409_;
6496 BalaCCodeExpression* _tmp410_;
6497 BalaCCodeExpression* _tmp411_;
6498 BalaCCodeFunction* _tmp412_;
6499 BalaCCodeFunction* _tmp413_;
6500 BalaCCodeExpression* _tmp414_;
6501 BalaCCodeExpression* _tmp415_;
6502 BalaCCodeFunction* _tmp416_;
6503 BalaCCodeFunction* _tmp417_;
6504 _tmp387_ = bala_ccode_base_module_get_ccode (self);
6505 _tmp388_ = _tmp387_;
6506 bala_ccode_function_open_block (_tmp388_);
6507 _tmp389_ = bala_variable_get_variable_type ((BalaVariable*) f);
6508 _tmp390_ = _tmp389_;
6509 _tmp391_ = bala_ccode_base_module_get_temp_variable (self, _tmp390_, TRUE(!(0)), NULL((void*)0), FALSE(0));
6510 temp_decl = _tmp391_;
6511 _tmp392_ = temp_decl;
6512 _tmp393_ = bala_symbol_get_name ((BalaSymbol*) _tmp392_);
6513 _tmp394_ = _tmp393_;
6514 _tmp395_ = rhs;
6515 _tmp396_ = bala_ccode_variable_declarator_new_zero (_tmp394_, _tmp395_, NULL((void*)0));
6516 vardecl = _tmp396_;
6517 _tmp397_ = bala_ccode_base_module_get_ccode (self);
6518 _tmp398_ = _tmp397_;
6519 _tmp399_ = temp_decl;
6520 _tmp400_ = bala_variable_get_variable_type ((BalaVariable*) _tmp399_);
6521 _tmp401_ = _tmp400_;
6522 _tmp402_ = bala_get_ccode_name ((BalaCodeNode*) _tmp401_);
6523 _tmp403_ = _tmp402_;
6524 _tmp404_ = vardecl;
6525 bala_ccode_function_add_declaration (_tmp398_, _tmp403_, (BalaCCodeDeclarator*) _tmp404_, 0);
6526 _g_free0 (_tmp403_)(_tmp403_ = (g_free (_tmp403_), ((void*)0)));
6527 _tmp405_ = temp_decl;
6528 _tmp406_ = bala_symbol_get_name ((BalaSymbol*) _tmp405_);
6529 _tmp407_ = _tmp406_;
6530 _tmp408_ = bala_ccode_base_module_get_variable_cname (self, _tmp407_);
6531 _tmp409_ = _tmp408_;
6532 _tmp410_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp409_);
6533 _tmp411_ = _tmp410_;
6534 _g_free0 (_tmp409_)(_tmp409_ = (g_free (_tmp409_), ((void*)0)));
6535 tmp = _tmp411_;
6536 _tmp412_ = bala_ccode_base_module_get_ccode (self);
6537 _tmp413_ = _tmp412_;
6538 _tmp414_ = lhs;
6539 _tmp415_ = tmp;
6540 bala_ccode_function_add_assignment (_tmp413_, _tmp414_, _tmp415_);
6541 _tmp416_ = bala_ccode_base_module_get_ccode (self);
6542 _tmp417_ = _tmp416_;
6543 bala_ccode_function_close (_tmp417_);
6544 _bala_ccode_node_unref0 (tmp)((tmp == ((void*)0)) ? ((void*)0) : (tmp = (bala_ccode_node_unref
(tmp), ((void*)0))))
;
6545 _bala_ccode_node_unref0 (vardecl)((vardecl == ((void*)0)) ? ((void*)0) : (vardecl = (bala_ccode_node_unref
(vardecl), ((void*)0))))
;
6546 _bala_code_node_unref0 (temp_decl)((temp_decl == ((void*)0)) ? ((void*)0) : (temp_decl = (bala_code_node_unref
(temp_decl), ((void*)0))))
;
6547 } else {
6548 BalaCCodeFunction* _tmp418_;
6549 BalaCCodeFunction* _tmp419_;
6550 BalaCCodeExpression* _tmp420_;
6551 BalaCCodeExpression* _tmp421_;
6552 _tmp418_ = bala_ccode_base_module_get_ccode (self);
6553 _tmp419_ = _tmp418_;
6554 _tmp420_ = lhs;
6555 _tmp421_ = rhs;
6556 bala_ccode_function_add_assignment (_tmp419_, _tmp420_, _tmp421_);
6557 }
6558 _tmp423_ = bala_variable_get_variable_type ((BalaVariable*) f);
6559 _tmp424_ = _tmp423_;
6560 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp424_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp424_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6561 _tmp422_ = bala_get_ccode_array_length ((BalaCodeNode*) f);
6562 } else {
6563 _tmp422_ = FALSE(0);
6564 }
6565 if (_tmp422_) {
6566 BalaArrayType* array_type = NULL((void*)0);
6567 BalaDataType* _tmp425_;
6568 BalaDataType* _tmp426_;
6569 BalaArrayType* _tmp427_;
6570 BalaTargetValue* field_value = NULL((void*)0);
6571 BalaTargetValue* _tmp428_;
6572 BalaGLibValue* glib_value = NULL((void*)0);
6573 BalaExpression* _tmp429_;
6574 BalaExpression* _tmp430_;
6575 BalaTargetValue* _tmp431_;
6576 BalaTargetValue* _tmp432_;
6577 BalaGLibValue* _tmp433_;
6578 BalaGLibValue* _tmp434_;
6579 BalaList* _tmp435_;
6580 _tmp425_ = bala_variable_get_variable_type ((BalaVariable*) f);
6581 _tmp426_ = _tmp425_;
6582 _tmp427_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp426_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp426_), ((bala_array_type_get_type ())))))
);
6583 array_type = _tmp427_;
6584 _tmp428_ = bala_ccode_base_module_get_field_cvalue (self, f, NULL((void*)0));
6585 field_value = _tmp428_;
6586 _tmp429_ = bala_variable_get_initializer ((BalaVariable*) f);
6587 _tmp430_ = _tmp429_;
6588 _tmp431_ = bala_expression_get_target_value (_tmp430_);
6589 _tmp432_ = _tmp431_;
6590 _tmp433_ = _bala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp432_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp432_), ((bala_glib_value_get_type ())))))
);
6591 glib_value = _tmp433_;
6592 _tmp434_ = glib_value;
6593 _tmp435_ = _tmp434_->array_length_cvalues;
6594 if (_tmp435_ != NULL((void*)0)) {
6595 {
6596 gint dim = 0;
6597 dim = 1;
6598 {
6599 gboolean _tmp436_ = FALSE(0);
6600 _tmp436_ = TRUE(!(0));
6601 while (TRUE(!(0))) {
6602 BalaArrayType* _tmp438_;
6603 gint _tmp439_;
6604 gint _tmp440_;
6605 BalaCCodeExpression* array_len_lhs = NULL((void*)0);
6606 BalaTargetValue* _tmp441_;
6607 BalaCCodeExpression* _tmp442_;
6608 BalaCCodeFunction* _tmp443_;
6609 BalaCCodeFunction* _tmp444_;
6610 BalaCCodeExpression* _tmp445_;
6611 BalaGLibValue* _tmp446_;
6612 BalaCCodeExpression* _tmp447_;
6613 BalaCCodeExpression* _tmp448_;
6614 if (!_tmp436_) {
6615 gint _tmp437_;
6616 _tmp437_ = dim;
6617 dim = _tmp437_ + 1;
6618 }
6619 _tmp436_ = FALSE(0);
6620 _tmp438_ = array_type;
6621 _tmp439_ = bala_array_type_get_rank (_tmp438_);
6622 _tmp440_ = _tmp439_;
6623 if (!(dim <= _tmp440_)) {
6624 break;
6625 }
6626 _tmp441_ = field_value;
6627 _tmp442_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp441_, dim);
6628 array_len_lhs = _tmp442_;
6629 _tmp443_ = bala_ccode_base_module_get_ccode (self);
6630 _tmp444_ = _tmp443_;
6631 _tmp445_ = array_len_lhs;
6632 _tmp446_ = glib_value;
6633 _tmp447_ = bala_ccode_base_module_get_array_length_cvalue (self, (BalaTargetValue*) _tmp446_, dim);
6634 _tmp448_ = _tmp447_;
6635 bala_ccode_function_add_assignment (_tmp444_, _tmp445_, _tmp448_);
6636 _bala_ccode_node_unref0 (_tmp448_)((_tmp448_ == ((void*)0)) ? ((void*)0) : (_tmp448_ = (bala_ccode_node_unref
(_tmp448_), ((void*)0))))
;
6637 _bala_ccode_node_unref0 (array_len_lhs)((array_len_lhs == ((void*)0)) ? ((void*)0) : (array_len_lhs =
(bala_ccode_node_unref (array_len_lhs), ((void*)0))))
;
6638 }
6639 }
6640 }
6641 } else {
6642 BalaGLibValue* _tmp449_;
6643 _tmp449_ = glib_value;
6644 if (_tmp449_->array_null_terminated) {
6645 BalaCCodeFunctionCall* len_call = NULL((void*)0);
6646 BalaCCodeIdentifier* _tmp450_;
6647 BalaCCodeIdentifier* _tmp451_;
6648 BalaCCodeFunctionCall* _tmp452_;
6649 BalaCCodeFunctionCall* _tmp453_;
6650 BalaCCodeFunctionCall* _tmp454_;
6651 BalaGLibValue* _tmp455_;
6652 BalaCCodeExpression* _tmp456_;
6653 BalaCCodeFunction* _tmp457_;
6654 BalaCCodeFunction* _tmp458_;
6655 BalaTargetValue* _tmp459_;
6656 BalaCCodeExpression* _tmp460_;
6657 BalaCCodeExpression* _tmp461_;
6658 BalaCCodeFunctionCall* _tmp462_;
6659 self->requires_array_length = TRUE(!(0));
6660 _tmp450_ = bala_ccode_identifier_new ("_bala_array_length");
6661 _tmp451_ = _tmp450_;
6662 _tmp452_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp451_);
6663 _tmp453_ = _tmp452_;
6664 _bala_ccode_node_unref0 (_tmp451_)((_tmp451_ == ((void*)0)) ? ((void*)0) : (_tmp451_ = (bala_ccode_node_unref
(_tmp451_), ((void*)0))))
;
6665 len_call = _tmp453_;
6666 _tmp454_ = len_call;
6667 _tmp455_ = glib_value;
6668 _tmp456_ = bala_get_cvalue_ ((BalaTargetValue*) _tmp455_);
6669 bala_ccode_function_call_add_argument (_tmp454_, _tmp456_);
6670 _tmp457_ = bala_ccode_base_module_get_ccode (self);
6671 _tmp458_ = _tmp457_;
6672 _tmp459_ = field_value;
6673 _tmp460_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp459_, 1);
6674 _tmp461_ = _tmp460_;
6675 _tmp462_ = len_call;
6676 bala_ccode_function_add_assignment (_tmp458_, _tmp461_, (BalaCCodeExpression*) _tmp462_);
6677 _bala_ccode_node_unref0 (_tmp461_)((_tmp461_ == ((void*)0)) ? ((void*)0) : (_tmp461_ = (bala_ccode_node_unref
(_tmp461_), ((void*)0))))
;
6678 _bala_ccode_node_unref0 (len_call)((len_call == ((void*)0)) ? ((void*)0) : (len_call = (bala_ccode_node_unref
(len_call), ((void*)0))))
;
6679 } else {
6680 {
6681 gint dim = 0;
6682 dim = 1;
6683 {
6684 gboolean _tmp463_ = FALSE(0);
6685 _tmp463_ = TRUE(!(0));
6686 while (TRUE(!(0))) {
6687 BalaArrayType* _tmp465_;
6688 gint _tmp466_;
6689 gint _tmp467_;
6690 BalaCCodeFunction* _tmp468_;
6691 BalaCCodeFunction* _tmp469_;
6692 BalaTargetValue* _tmp470_;
6693 BalaCCodeExpression* _tmp471_;
6694 BalaCCodeExpression* _tmp472_;
6695 BalaCCodeConstant* _tmp473_;
6696 BalaCCodeConstant* _tmp474_;
6697 if (!_tmp463_) {
6698 gint _tmp464_;
6699 _tmp464_ = dim;
6700 dim = _tmp464_ + 1;
6701 }
6702 _tmp463_ = FALSE(0);
6703 _tmp465_ = array_type;
6704 _tmp466_ = bala_array_type_get_rank (_tmp465_);
6705 _tmp467_ = _tmp466_;
6706 if (!(dim <= _tmp467_)) {
6707 break;
6708 }
6709 _tmp468_ = bala_ccode_base_module_get_ccode (self);
6710 _tmp469_ = _tmp468_;
6711 _tmp470_ = field_value;
6712 _tmp471_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp470_, dim);
6713 _tmp472_ = _tmp471_;
6714 _tmp473_ = bala_ccode_constant_new ("-1");
6715 _tmp474_ = _tmp473_;
6716 bala_ccode_function_add_assignment (_tmp469_, _tmp472_, (BalaCCodeExpression*) _tmp474_);
6717 _bala_ccode_node_unref0 (_tmp474_)((_tmp474_ == ((void*)0)) ? ((void*)0) : (_tmp474_ = (bala_ccode_node_unref
(_tmp474_), ((void*)0))))
;
6718 _bala_ccode_node_unref0 (_tmp472_)((_tmp472_ == ((void*)0)) ? ((void*)0) : (_tmp472_ = (bala_ccode_node_unref
(_tmp472_), ((void*)0))))
;
6719 }
6720 }
6721 }
6722 }
6723 }
6724 _bala_target_value_unref0 (glib_value)((glib_value == ((void*)0)) ? ((void*)0) : (glib_value = (bala_target_value_unref
(glib_value), ((void*)0))))
;
6725 _bala_target_value_unref0 (field_value)((field_value == ((void*)0)) ? ((void*)0) : (field_value = (bala_target_value_unref
(field_value), ((void*)0))))
;
6726 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
6727 }
6728 } else {
6729 BalaSourceReference* _tmp475_;
6730 BalaSourceReference* _tmp476_;
6731 bala_code_node_set_error ((BalaCodeNode*) f, TRUE(!(0)));
6732 _tmp475_ = bala_code_node_get_source_reference ((BalaCodeNode*) f);
6733 _tmp476_ = _tmp475_;
6734 bala_report_error (_tmp476_, "Non-constant field initializers not supported in this context");
6735 _bala_ccode_node_unref0 (rhs)((rhs == ((void*)0)) ? ((void*)0) : (rhs = (bala_ccode_node_unref
(rhs), ((void*)0))))
;
6736 _bala_ccode_node_unref0 (var_def)((var_def == ((void*)0)) ? ((void*)0) : (var_def = (bala_ccode_node_unref
(var_def), ((void*)0))))
;
6737 _bala_ccode_node_unref0 (var_decl)((var_decl == ((void*)0)) ? ((void*)0) : (var_decl = (bala_ccode_node_unref
(var_decl), ((void*)0))))
;
6738 _bala_ccode_node_unref0 (lhs)((lhs == ((void*)0)) ? ((void*)0) : (lhs = (bala_ccode_node_unref
(lhs), ((void*)0))))
;
6739 _bala_code_node_unref0 (cl)((cl == ((void*)0)) ? ((void*)0) : (cl = (bala_code_node_unref
(cl), ((void*)0))))
;
6740 return;
6741 }
6742 }
6743 _bala_ccode_node_unref0 (rhs)((rhs == ((void*)0)) ? ((void*)0) : (rhs = (bala_ccode_node_unref
(rhs), ((void*)0))))
;
6744 }
6745 bala_ccode_base_module_pop_context (self);
6746 _bala_ccode_node_unref0 (var_def)((var_def == ((void*)0)) ? ((void*)0) : (var_def = (bala_ccode_node_unref
(var_def), ((void*)0))))
;
6747 _bala_ccode_node_unref0 (var_decl)((var_decl == ((void*)0)) ? ((void*)0) : (var_decl = (bala_ccode_node_unref
(var_decl), ((void*)0))))
;
6748 }
6749 }
6750 }
6751 bala_ccode_base_module_pop_line (self);
6752 _bala_ccode_node_unref0 (lhs)((lhs == ((void*)0)) ? ((void*)0) : (lhs = (bala_ccode_node_unref
(lhs), ((void*)0))))
;
6753 _bala_code_node_unref0 (cl)((cl == ((void*)0)) ? ((void*)0) : (cl = (bala_code_node_unref
(cl), ((void*)0))))
;
6754}
6755
6756gboolean
6757bala_ccode_base_module_is_constant_ccode_expression (BalaCCodeExpression* cexpr)
6758{
6759 BalaCCodeParenthesizedExpression* cparenthesized = NULL((void*)0);
6760 BalaCCodeParenthesizedExpression* _tmp19_;
6761 gboolean _tmp20_ = FALSE(0);
6762 BalaCCodeParenthesizedExpression* _tmp21_;
6763 gboolean result = FALSE(0);
6764 g_return_val_if_fail (cexpr != NULL, FALSE)do { if ((cexpr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cexpr != NULL"
); return ((0)); } } while (0)
;
6765 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6766 result = TRUE(!(0));
6767 return result;
6768 } else {
6769 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_cast_expression_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
6770 BalaCCodeCastExpression* ccast = NULL((void*)0);
6771 BalaCCodeCastExpression* _tmp0_;
6772 BalaCCodeCastExpression* _tmp1_;
6773 BalaCCodeExpression* _tmp2_;
6774 BalaCCodeExpression* _tmp3_;
6775 _tmp0_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION, BalaCCodeCastExpression)(((BalaCCodeCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_cast_expression_get_type ())))))
);
6776 ccast = _tmp0_;
6777 _tmp1_ = ccast;
6778 _tmp2_ = bala_ccode_cast_expression_get_inner (_tmp1_);
6779 _tmp3_ = _tmp2_;
6780 result = bala_ccode_base_module_is_constant_ccode_expression (_tmp3_);
6781 _bala_ccode_node_unref0 (ccast)((ccast == ((void*)0)) ? ((void*)0) : (ccast = (bala_ccode_node_unref
(ccast), ((void*)0))))
;
6782 return result;
6783 } else {
6784 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_UNARY_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_unary_expression_get_type ()
)); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
6785 BalaCCodeUnaryExpression* cunary = NULL((void*)0);
6786 BalaCCodeUnaryExpression* _tmp4_;
6787 BalaCCodeUnaryExpression* _tmp5_;
6788 BalaCCodeUnaryOperator _tmp6_;
6789 BalaCCodeUnaryOperator _tmp7_;
6790 BalaCCodeUnaryExpression* _tmp8_;
6791 BalaCCodeExpression* _tmp9_;
6792 BalaCCodeExpression* _tmp10_;
6793 _tmp4_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_UNARY_EXPRESSION, BalaCCodeUnaryExpression)(((BalaCCodeUnaryExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_unary_expression_get_type ())))))
);
6794 cunary = _tmp4_;
6795 _tmp5_ = cunary;
6796 _tmp6_ = bala_ccode_unary_expression_get_operator (_tmp5_);
6797 _tmp7_ = _tmp6_;
6798 switch (_tmp7_) {
6799 case BALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT:
6800 case BALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT:
6801 case BALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT:
6802 case BALA_CCODE_UNARY_OPERATOR_POSTFIX_DECREMENT:
6803 {
6804 result = FALSE(0);
6805 _bala_ccode_node_unref0 (cunary)((cunary == ((void*)0)) ? ((void*)0) : (cunary = (bala_ccode_node_unref
(cunary), ((void*)0))))
;
6806 return result;
6807 }
6808 default:
6809 {
6810 break;
6811 }
6812 }
6813 _tmp8_ = cunary;
6814 _tmp9_ = bala_ccode_unary_expression_get_inner (_tmp8_);
6815 _tmp10_ = _tmp9_;
6816 result = bala_ccode_base_module_is_constant_ccode_expression (_tmp10_);
6817 _bala_ccode_node_unref0 (cunary)((cunary == ((void*)0)) ? ((void*)0) : (cunary = (bala_ccode_node_unref
(cunary), ((void*)0))))
;
6818 return result;
6819 } else {
6820 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_BINARY_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_binary_expression_get_type (
))); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
6821 BalaCCodeBinaryExpression* cbinary = NULL((void*)0);
6822 BalaCCodeBinaryExpression* _tmp11_;
6823 gboolean _tmp12_ = FALSE(0);
6824 BalaCCodeBinaryExpression* _tmp13_;
6825 BalaCCodeExpression* _tmp14_;
6826 BalaCCodeExpression* _tmp15_;
6827 _tmp11_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_BINARY_EXPRESSION, BalaCCodeBinaryExpression)(((BalaCCodeBinaryExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_binary_expression_get_type ())))))
);
6828 cbinary = _tmp11_;
6829 _tmp13_ = cbinary;
6830 _tmp14_ = bala_ccode_binary_expression_get_left (_tmp13_);
6831 _tmp15_ = _tmp14_;
6832 if (bala_ccode_base_module_is_constant_ccode_expression (_tmp15_)) {
6833 BalaCCodeBinaryExpression* _tmp16_;
6834 BalaCCodeExpression* _tmp17_;
6835 BalaCCodeExpression* _tmp18_;
6836 _tmp16_ = cbinary;
6837 _tmp17_ = bala_ccode_binary_expression_get_right (_tmp16_);
6838 _tmp18_ = _tmp17_;
6839 _tmp12_ = bala_ccode_base_module_is_constant_ccode_expression (_tmp18_);
6840 } else {
6841 _tmp12_ = FALSE(0);
6842 }
6843 result = _tmp12_;
6844 _bala_ccode_node_unref0 (cbinary)((cbinary == ((void*)0)) ? ((void*)0) : (cbinary = (bala_ccode_node_unref
(cbinary), ((void*)0))))
;
6845 return result;
6846 }
6847 }
6848 }
6849 }
6850 _tmp19_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_parenthesized_expression_get_type
())); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
? ((BalaCCodeParenthesizedExpression*) cexpr) : NULL((void*)0));
6851 cparenthesized = _tmp19_;
6852 _tmp21_ = cparenthesized;
6853 if (NULL((void*)0) != _tmp21_) {
6854 BalaCCodeParenthesizedExpression* _tmp22_;
6855 BalaCCodeExpression* _tmp23_;
6856 BalaCCodeExpression* _tmp24_;
6857 _tmp22_ = cparenthesized;
6858 _tmp23_ = bala_ccode_parenthesized_expression_get_inner (_tmp22_);
6859 _tmp24_ = _tmp23_;
6860 _tmp20_ = bala_ccode_base_module_is_constant_ccode_expression (_tmp24_);
6861 } else {
6862 _tmp20_ = FALSE(0);
6863 }
6864 result = _tmp20_;
6865 _bala_ccode_node_unref0 (cparenthesized)((cparenthesized == ((void*)0)) ? ((void*)0) : (cparenthesized
= (bala_ccode_node_unref (cparenthesized), ((void*)0))))
;
6866 return result;
6867}
6868
6869gboolean
6870bala_ccode_base_module_is_constant_ccode (BalaCodeNode* expr)
6871{
6872 gboolean result = FALSE(0);
6873 g_return_val_if_fail (expr != NULL, FALSE)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return ((0)); } } while (0)
;
6874 if (G_TYPE_CHECK_INSTANCE_TYPE (expr, BALA_TYPE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
expr); GType __t = ((bala_constant_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6875 BalaSymbol* _tmp0_;
6876 BalaSymbol* _tmp1_;
6877 _tmp0_ = bala_symbol_get_parent_symbol ((BalaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (expr, BALA_TYPE_CONSTANT, BalaConstant)(((BalaConstant*) g_type_check_instance_cast ((GTypeInstance*
) (expr), ((bala_constant_get_type ())))))
);
6878 _tmp1_ = _tmp0_;
6879 result = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
6880 return result;
6881 } else {
6882 if (G_TYPE_CHECK_INSTANCE_TYPE (expr, BALA_TYPE_INTEGER_LITERAL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
expr); GType __t = ((bala_integer_literal_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6883 result = bala_expression_is_constant ((BalaExpression*) G_TYPE_CHECK_INSTANCE_CAST (expr, BALA_TYPE_INTEGER_LITERAL, BalaIntegerLiteral)(((BalaIntegerLiteral*) g_type_check_instance_cast ((GTypeInstance
*) (expr), ((bala_integer_literal_get_type ())))))
);
6884 return result;
6885 } else {
6886 if (G_TYPE_CHECK_INSTANCE_TYPE (expr, BALA_TYPE_MEMBER_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
expr); GType __t = ((bala_member_access_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6887 BalaSymbol* _tmp2_;
6888 BalaSymbol* _tmp3_;
6889 _tmp2_ = bala_expression_get_symbol_reference ((BalaExpression*) G_TYPE_CHECK_INSTANCE_CAST (expr, BALA_TYPE_MEMBER_ACCESS, BalaMemberAccess)(((BalaMemberAccess*) g_type_check_instance_cast ((GTypeInstance
*) (expr), ((bala_member_access_get_type ())))))
);
6890 _tmp3_ = _tmp2_;
6891 result = bala_ccode_base_module_is_constant_ccode ((BalaCodeNode*) _tmp3_);
6892 return result;
6893 } else {
6894 if (G_TYPE_CHECK_INSTANCE_TYPE (expr, BALA_TYPE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
expr); GType __t = ((bala_cast_expression_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6895 BalaExpression* _tmp4_;
6896 BalaExpression* _tmp5_;
6897 _tmp4_ = bala_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (expr, BALA_TYPE_CAST_EXPRESSION, BalaCastExpression)(((BalaCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (expr), ((bala_cast_expression_get_type ())))))
);
6898 _tmp5_ = _tmp4_;
6899 result = bala_ccode_base_module_is_constant_ccode ((BalaCodeNode*) _tmp5_);
6900 return result;
6901 }
6902 }
6903 }
6904 }
6905 result = FALSE(0);
6906 return result;
6907}
6908
6909/**
6910 * Returns whether the passed cexpr is a pure expression, i.e. an
6911 * expression without side-effects.
6912 */
6913gboolean
6914bala_ccode_base_module_is_pure_ccode_expression (BalaCCodeExpression* cexpr)
6915{
6916 gboolean _tmp0_ = FALSE(0);
6917 gboolean result = FALSE(0);
6918 g_return_val_if_fail (cexpr != NULL, FALSE)do { if ((cexpr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cexpr != NULL"
); return ((0)); } } while (0)
;
6919 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
6920 _tmp0_ = TRUE(!(0));
6921 } else {
6922 _tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_identifier_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
6923 }
6924 if (_tmp0_) {
6925 result = TRUE(!(0));
6926 return result;
6927 } else {
6928 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_BINARY_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_binary_expression_get_type (
))); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
6929 BalaCCodeBinaryExpression* cbinary = NULL((void*)0);
6930 BalaCCodeBinaryExpression* _tmp1_;
6931 gboolean _tmp2_ = FALSE(0);
6932 BalaCCodeBinaryExpression* _tmp3_;
6933 BalaCCodeExpression* _tmp4_;
6934 BalaCCodeExpression* _tmp5_;
6935 _tmp1_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_BINARY_EXPRESSION, BalaCCodeBinaryExpression)(((BalaCCodeBinaryExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_binary_expression_get_type ())))))
);
6936 cbinary = _tmp1_;
6937 _tmp3_ = cbinary;
6938 _tmp4_ = bala_ccode_binary_expression_get_left (_tmp3_);
6939 _tmp5_ = _tmp4_;
6940 if (bala_ccode_base_module_is_pure_ccode_expression (_tmp5_)) {
6941 BalaCCodeBinaryExpression* _tmp6_;
6942 BalaCCodeExpression* _tmp7_;
6943 BalaCCodeExpression* _tmp8_;
6944 _tmp6_ = cbinary;
6945 _tmp7_ = bala_ccode_binary_expression_get_right (_tmp6_);
6946 _tmp8_ = _tmp7_;
6947 _tmp2_ = bala_ccode_base_module_is_pure_ccode_expression (_tmp8_);
6948 } else {
6949 _tmp2_ = FALSE(0);
6950 }
6951 result = _tmp2_;
6952 _bala_ccode_node_unref0 (cbinary)((cbinary == ((void*)0)) ? ((void*)0) : (cbinary = (bala_ccode_node_unref
(cbinary), ((void*)0))))
;
6953 return result;
6954 } else {
6955 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_UNARY_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_unary_expression_get_type ()
)); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
6956 BalaCCodeUnaryExpression* cunary = NULL((void*)0);
6957 BalaCCodeUnaryExpression* _tmp9_;
6958 BalaCCodeUnaryExpression* _tmp10_;
6959 BalaCCodeUnaryOperator _tmp11_;
6960 BalaCCodeUnaryOperator _tmp12_;
6961 _tmp9_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_UNARY_EXPRESSION, BalaCCodeUnaryExpression)(((BalaCCodeUnaryExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_unary_expression_get_type ())))))
);
6962 cunary = _tmp9_;
6963 _tmp10_ = cunary;
6964 _tmp11_ = bala_ccode_unary_expression_get_operator (_tmp10_);
6965 _tmp12_ = _tmp11_;
6966 switch (_tmp12_) {
6967 case BALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT:
6968 case BALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT:
6969 case BALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT:
6970 case BALA_CCODE_UNARY_OPERATOR_POSTFIX_DECREMENT:
6971 {
6972 result = FALSE(0);
6973 _bala_ccode_node_unref0 (cunary)((cunary == ((void*)0)) ? ((void*)0) : (cunary = (bala_ccode_node_unref
(cunary), ((void*)0))))
;
6974 return result;
6975 }
6976 default:
6977 {
6978 BalaCCodeUnaryExpression* _tmp13_;
6979 BalaCCodeExpression* _tmp14_;
6980 BalaCCodeExpression* _tmp15_;
6981 _tmp13_ = cunary;
6982 _tmp14_ = bala_ccode_unary_expression_get_inner (_tmp13_);
6983 _tmp15_ = _tmp14_;
6984 result = bala_ccode_base_module_is_pure_ccode_expression (_tmp15_);
6985 _bala_ccode_node_unref0 (cunary)((cunary == ((void*)0)) ? ((void*)0) : (cunary = (bala_ccode_node_unref
(cunary), ((void*)0))))
;
6986 return result;
6987 }
6988 }
6989 _bala_ccode_node_unref0 (cunary)((cunary == ((void*)0)) ? ((void*)0) : (cunary = (bala_ccode_node_unref
(cunary), ((void*)0))))
;
6990 } else {
6991 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_MEMBER_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_member_access_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
6992 BalaCCodeMemberAccess* cma = NULL((void*)0);
6993 BalaCCodeMemberAccess* _tmp16_;
6994 BalaCCodeMemberAccess* _tmp17_;
6995 BalaCCodeExpression* _tmp18_;
6996 BalaCCodeExpression* _tmp19_;
6997 _tmp16_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_MEMBER_ACCESS, BalaCCodeMemberAccess)(((BalaCCodeMemberAccess*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_member_access_get_type ())))))
);
6998 cma = _tmp16_;
6999 _tmp17_ = cma;
7000 _tmp18_ = bala_ccode_member_access_get_inner (_tmp17_);
7001 _tmp19_ = _tmp18_;
7002 result = bala_ccode_base_module_is_pure_ccode_expression (_tmp19_);
7003 _bala_ccode_node_unref0 (cma)((cma == ((void*)0)) ? ((void*)0) : (cma = (bala_ccode_node_unref
(cma), ((void*)0))))
;
7004 return result;
7005 } else {
7006 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_ELEMENT_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_element_access_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
7007 BalaCCodeElementAccess* cea = NULL((void*)0);
7008 BalaCCodeElementAccess* _tmp20_;
7009 gboolean _tmp21_ = FALSE(0);
7010 BalaCCodeElementAccess* _tmp22_;
7011 BalaCCodeExpression* _tmp23_;
7012 BalaCCodeExpression* _tmp24_;
7013 _tmp20_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_ELEMENT_ACCESS, BalaCCodeElementAccess)(((BalaCCodeElementAccess*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_element_access_get_type ())))))
);
7014 cea = _tmp20_;
7015 _tmp22_ = cea;
7016 _tmp23_ = bala_ccode_element_access_get_container (_tmp22_);
7017 _tmp24_ = _tmp23_;
7018 if (bala_ccode_base_module_is_pure_ccode_expression (_tmp24_)) {
7019 BalaCCodeElementAccess* _tmp25_;
7020 BalaList* _tmp26_;
7021 BalaList* _tmp27_;
7022 gpointer _tmp28_;
7023 BalaCCodeExpression* _tmp29_;
7024 _tmp25_ = cea;
7025 _tmp26_ = bala_ccode_element_access_get_indices (_tmp25_);
7026 _tmp27_ = _tmp26_;
7027 _tmp28_ = bala_list_get (_tmp27_, 0);
7028 _tmp29_ = (BalaCCodeExpression*) _tmp28_;
7029 _tmp21_ = bala_ccode_base_module_is_pure_ccode_expression (_tmp29_);
7030 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
7031 } else {
7032 _tmp21_ = FALSE(0);
7033 }
7034 result = _tmp21_;
7035 _bala_ccode_node_unref0 (cea)((cea == ((void*)0)) ? ((void*)0) : (cea = (bala_ccode_node_unref
(cea), ((void*)0))))
;
7036 return result;
7037 } else {
7038 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_cast_expression_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
7039 BalaCCodeCastExpression* ccast = NULL((void*)0);
7040 BalaCCodeCastExpression* _tmp30_;
7041 BalaCCodeCastExpression* _tmp31_;
7042 BalaCCodeExpression* _tmp32_;
7043 BalaCCodeExpression* _tmp33_;
7044 _tmp30_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION, BalaCCodeCastExpression)(((BalaCCodeCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_cast_expression_get_type ())))))
);
7045 ccast = _tmp30_;
7046 _tmp31_ = ccast;
7047 _tmp32_ = bala_ccode_cast_expression_get_inner (_tmp31_);
7048 _tmp33_ = _tmp32_;
7049 result = bala_ccode_base_module_is_pure_ccode_expression (_tmp33_);
7050 _bala_ccode_node_unref0 (ccast)((ccast == ((void*)0)) ? ((void*)0) : (ccast = (bala_ccode_node_unref
(ccast), ((void*)0))))
;
7051 return result;
7052 } else {
7053 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_parenthesized_expression_get_type
())); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
7054 BalaCCodeParenthesizedExpression* cparenthesized = NULL((void*)0);
7055 BalaCCodeParenthesizedExpression* _tmp34_;
7056 BalaCCodeParenthesizedExpression* _tmp35_;
7057 BalaCCodeExpression* _tmp36_;
7058 BalaCCodeExpression* _tmp37_;
7059 _tmp34_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_PARENTHESIZED_EXPRESSION, BalaCCodeParenthesizedExpression)(((BalaCCodeParenthesizedExpression*) g_type_check_instance_cast
((GTypeInstance*) (cexpr), ((bala_ccode_parenthesized_expression_get_type
())))))
);
7060 cparenthesized = _tmp34_;
7061 _tmp35_ = cparenthesized;
7062 _tmp36_ = bala_ccode_parenthesized_expression_get_inner (_tmp35_);
7063 _tmp37_ = _tmp36_;
7064 result = bala_ccode_base_module_is_pure_ccode_expression (_tmp37_);
7065 _bala_ccode_node_unref0 (cparenthesized)((cparenthesized == ((void*)0)) ? ((void*)0) : (cparenthesized
= (bala_ccode_node_unref (cparenthesized), ((void*)0))))
;
7066 return result;
7067 }
7068 }
7069 }
7070 }
7071 }
7072 }
7073 }
7074 result = FALSE(0);
7075 return result;
7076}
7077
7078static void
7079bala_ccode_base_module_real_visit_property (BalaCodeVisitor* base,
7080 BalaProperty* prop)
7081{
7082 BalaCCodeBaseModule * self;
7083 BalaPropertyAccessor* _tmp0_;
7084 BalaPropertyAccessor* _tmp1_;
7085 BalaPropertyAccessor* _tmp4_;
7086 BalaPropertyAccessor* _tmp5_;
7087 self = (BalaCCodeBaseModule*) base;
7088 g_return_if_fail (prop != NULL)do { if ((prop != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "prop != NULL"
); return; } } while (0)
;
7089 bala_ccode_base_module_visit_member (self, (BalaSymbol*) prop);
7090 _tmp0_ = bala_property_get_get_accessor (prop);
7091 _tmp1_ = _tmp0_;
7092 if (_tmp1_ != NULL((void*)0)) {
7093 BalaPropertyAccessor* _tmp2_;
7094 BalaPropertyAccessor* _tmp3_;
7095 _tmp2_ = bala_property_get_get_accessor (prop);
7096 _tmp3_ = _tmp2_;
7097 bala_code_node_accept ((BalaCodeNode*) _tmp3_, (BalaCodeVisitor*) self);
7098 }
7099 _tmp4_ = bala_property_get_set_accessor (prop);
7100 _tmp5_ = _tmp4_;
7101 if (_tmp5_ != NULL((void*)0)) {
7102 BalaPropertyAccessor* _tmp6_;
7103 BalaPropertyAccessor* _tmp7_;
7104 _tmp6_ = bala_property_get_set_accessor (prop);
7105 _tmp7_ = _tmp6_;
7106 bala_code_node_accept ((BalaCodeNode*) _tmp7_, (BalaCodeVisitor*) self);
7107 }
7108}
7109
7110void
7111bala_ccode_base_module_generate_type_declaration (BalaCCodeBaseModule* self,
7112 BalaDataType* type,
7113 BalaCCodeFile* decl_space)
7114{
7115 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
7116 g_return_if_fail (type != NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return; } } while (0)
;
7117 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
7118 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_OBJECT_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_object_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7119 BalaObjectType* object_type = NULL((void*)0);
7120 BalaObjectType* _tmp0_;
7121 BalaObjectType* _tmp1_;
7122 BalaTypeSymbol* _tmp2_;
7123 BalaTypeSymbol* _tmp3_;
7124 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_OBJECT_TYPE, BalaObjectType)(((BalaObjectType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_object_type_get_type ())))))
);
7125 object_type = _tmp0_;
7126 _tmp1_ = object_type;
7127 _tmp2_ = bala_data_type_get_type_symbol ((BalaDataType*) _tmp1_);
7128 _tmp3_ = _tmp2_;
7129 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7130 BalaClass* cl = NULL((void*)0);
7131 BalaObjectType* _tmp4_;
7132 BalaTypeSymbol* _tmp5_;
7133 BalaTypeSymbol* _tmp6_;
7134 BalaClass* _tmp7_;
7135 BalaClass* _tmp8_;
7136 gboolean _tmp9_ = FALSE(0);
7137 BalaClass* _tmp10_;
7138 gboolean _tmp11_;
7139 gboolean _tmp12_;
7140 _tmp4_ = object_type;
7141 _tmp5_ = bala_data_type_get_type_symbol ((BalaDataType*) _tmp4_);
7142 _tmp6_ = _tmp5_;
7143 _tmp7_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp6_), ((bala_class_get_type ())))))
);
7144 cl = _tmp7_;
7145 _tmp8_ = cl;
7146 bala_ccode_base_module_generate_class_declaration (self, _tmp8_, decl_space);
7147 _tmp10_ = cl;
7148 _tmp11_ = bala_class_get_is_compact (_tmp10_);
7149 _tmp12_ = _tmp11_;
7150 if (!_tmp12_) {
7151 BalaClass* _tmp13_;
7152 _tmp13_ = cl;
7153 _tmp9_ = bala_object_type_symbol_has_type_parameters ((BalaObjectTypeSymbol*) _tmp13_);
7154 } else {
7155 _tmp9_ = FALSE(0);
7156 }
7157 if (_tmp9_) {
7158 BalaTypeSymbol* _tmp14_;
7159 _tmp14_ = self->gtype_type;
7160 bala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp14_), ((bala_struct_get_type ())))))
, decl_space);
7161 }
7162 _bala_code_node_unref0 (cl)((cl == ((void*)0)) ? ((void*)0) : (cl = (bala_code_node_unref
(cl), ((void*)0))))
;
7163 } else {
7164 BalaObjectType* _tmp15_;
7165 BalaTypeSymbol* _tmp16_;
7166 BalaTypeSymbol* _tmp17_;
7167 _tmp15_ = object_type;
7168 _tmp16_ = bala_data_type_get_type_symbol ((BalaDataType*) _tmp15_);
7169 _tmp17_ = _tmp16_;
7170 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp17_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7171 BalaInterface* iface = NULL((void*)0);
7172 BalaObjectType* _tmp18_;
7173 BalaTypeSymbol* _tmp19_;
7174 BalaTypeSymbol* _tmp20_;
7175 BalaInterface* _tmp21_;
7176 BalaInterface* _tmp22_;
7177 BalaInterface* _tmp23_;
7178 _tmp18_ = object_type;
7179 _tmp19_ = bala_data_type_get_type_symbol ((BalaDataType*) _tmp18_);
7180 _tmp20_ = _tmp19_;
7181 _tmp21_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, BALA_TYPE_INTERFACE, BalaInterface)(((BalaInterface*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp20_), ((bala_interface_get_type ())))))
);
7182 iface = _tmp21_;
7183 _tmp22_ = iface;
7184 bala_ccode_base_module_generate_interface_declaration (self, _tmp22_, decl_space);
7185 _tmp23_ = iface;
7186 if (bala_object_type_symbol_has_type_parameters ((BalaObjectTypeSymbol*) _tmp23_)) {
7187 BalaTypeSymbol* _tmp24_;
7188 _tmp24_ = self->gtype_type;
7189 bala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp24_), ((bala_struct_get_type ())))))
, decl_space);
7190 }
7191 _bala_code_node_unref0 (iface)((iface == ((void*)0)) ? ((void*)0) : (iface = (bala_code_node_unref
(iface), ((void*)0))))
;
7192 }
7193 }
7194 _bala_code_node_unref0 (object_type)((object_type == ((void*)0)) ? ((void*)0) : (object_type = (bala_code_node_unref
(object_type), ((void*)0))))
;
7195 } else {
7196 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7197 BalaDelegateType* deleg_type = NULL((void*)0);
7198 BalaDelegateType* _tmp25_;
7199 BalaDelegate* d = NULL((void*)0);
7200 BalaDelegateType* _tmp26_;
7201 BalaDelegate* _tmp27_;
7202 BalaDelegate* _tmp28_;
7203 BalaDelegate* _tmp29_;
7204 BalaDelegate* _tmp30_;
7205 BalaDelegate* _tmp31_;
7206 gboolean _tmp32_;
7207 gboolean _tmp33_;
7208 _tmp25_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_delegate_type_get_type ())))))
);
7209 deleg_type = _tmp25_;
7210 _tmp26_ = deleg_type;
7211 _tmp27_ = bala_delegate_type_get_delegate_symbol (_tmp26_);
7212 _tmp28_ = _tmp27_;
7213 _tmp29_ = _bala_code_node_ref0 (_tmp28_);
7214 d = _tmp29_;
7215 _tmp30_ = d;
7216 bala_ccode_base_module_generate_delegate_declaration (self, _tmp30_, decl_space);
7217 _tmp31_ = d;
7218 _tmp32_ = bala_delegate_get_has_target (_tmp31_);
7219 _tmp33_ = _tmp32_;
7220 if (_tmp33_) {
7221 BalaDataType* _tmp34_;
7222 BalaDelegateType* _tmp35_;
7223 _tmp34_ = self->delegate_target_type;
7224 bala_ccode_base_module_generate_type_declaration (self, _tmp34_, decl_space);
7225 _tmp35_ = deleg_type;
7226 if (bala_data_type_is_disposable ((BalaDataType*) _tmp35_)) {
7227 BalaDelegateType* _tmp36_;
7228 _tmp36_ = self->delegate_target_destroy_type;
7229 bala_ccode_base_module_generate_type_declaration (self, (BalaDataType*) _tmp36_, decl_space);
7230 }
7231 }
7232 _bala_code_node_unref0 (d)((d == ((void*)0)) ? ((void*)0) : (d = (bala_code_node_unref (
d), ((void*)0))))
;
7233 _bala_code_node_unref0 (deleg_type)((deleg_type == ((void*)0)) ? ((void*)0) : (deleg_type = (bala_code_node_unref
(deleg_type), ((void*)0))))
;
7234 } else {
7235 BalaTypeSymbol* _tmp37_;
7236 BalaTypeSymbol* _tmp38_;
7237 _tmp37_ = bala_data_type_get_type_symbol (type);
7238 _tmp38_ = _tmp37_;
7239 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp38_, BALA_TYPE_ENUM)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp38_); GType __t = ((bala_enum_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7240 BalaEnum* en = NULL((void*)0);
7241 BalaTypeSymbol* _tmp39_;
7242 BalaTypeSymbol* _tmp40_;
7243 BalaEnum* _tmp41_;
7244 BalaEnum* _tmp42_;
7245 _tmp39_ = bala_data_type_get_type_symbol (type);
7246 _tmp40_ = _tmp39_;
7247 _tmp41_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp40_, BALA_TYPE_ENUM, BalaEnum)(((BalaEnum*) g_type_check_instance_cast ((GTypeInstance*) (_tmp40_
), ((bala_enum_get_type ())))))
);
7248 en = _tmp41_;
7249 _tmp42_ = en;
7250 bala_ccode_base_module_generate_enum_declaration (self, _tmp42_, decl_space);
7251 _bala_code_node_unref0 (en)((en == ((void*)0)) ? ((void*)0) : (en = (bala_code_node_unref
(en), ((void*)0))))
;
7252 } else {
7253 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_value_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7254 BalaValueType* value_type = NULL((void*)0);
7255 BalaValueType* _tmp43_;
7256 BalaValueType* _tmp44_;
7257 BalaTypeSymbol* _tmp45_;
7258 BalaTypeSymbol* _tmp46_;
7259 _tmp43_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_VALUE_TYPE, BalaValueType)(((BalaValueType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_value_type_get_type ())))))
);
7260 value_type = _tmp43_;
7261 _tmp44_ = value_type;
7262 _tmp45_ = bala_data_type_get_type_symbol ((BalaDataType*) _tmp44_);
7263 _tmp46_ = _tmp45_;
7264 bala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp46_), ((bala_struct_get_type ())))))
, decl_space);
7265 _bala_code_node_unref0 (value_type)((value_type == ((void*)0)) ? ((void*)0) : (value_type = (bala_code_node_unref
(value_type), ((void*)0))))
;
7266 } else {
7267 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_array_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7268 BalaArrayType* array_type = NULL((void*)0);
7269 BalaArrayType* _tmp47_;
7270 BalaArrayType* _tmp48_;
7271 BalaDataType* _tmp49_;
7272 BalaDataType* _tmp50_;
7273 BalaArrayType* _tmp51_;
7274 BalaDataType* _tmp52_;
7275 BalaDataType* _tmp53_;
7276 _tmp47_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_array_type_get_type ())))))
);
7277 array_type = _tmp47_;
7278 _tmp48_ = array_type;
7279 _tmp49_ = bala_array_type_get_element_type (_tmp48_);
7280 _tmp50_ = _tmp49_;
7281 bala_ccode_base_module_generate_type_declaration (self, _tmp50_, decl_space);
7282 _tmp51_ = array_type;
7283 _tmp52_ = bala_array_type_get_length_type (_tmp51_);
7284 _tmp53_ = _tmp52_;
7285 if (_tmp53_ != NULL((void*)0)) {
7286 BalaArrayType* _tmp54_;
7287 BalaDataType* _tmp55_;
7288 BalaDataType* _tmp56_;
7289 _tmp54_ = array_type;
7290 _tmp55_ = bala_array_type_get_length_type (_tmp54_);
7291 _tmp56_ = _tmp55_;
7292 bala_ccode_base_module_generate_type_declaration (self, _tmp56_, decl_space);
7293 }
7294 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
7295 } else {
7296 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ERROR_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_error_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7297 BalaErrorType* error_type = NULL((void*)0);
7298 BalaErrorType* _tmp57_;
7299 BalaErrorType* _tmp58_;
7300 BalaErrorDomain* _tmp59_;
7301 BalaErrorDomain* _tmp60_;
7302 _tmp57_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_ERROR_TYPE, BalaErrorType)(((BalaErrorType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_error_type_get_type ())))))
);
7303 error_type = _tmp57_;
7304 _tmp58_ = error_type;
7305 _tmp59_ = bala_error_type_get_error_domain (_tmp58_);
7306 _tmp60_ = _tmp59_;
7307 if (_tmp60_ != NULL((void*)0)) {
7308 BalaErrorType* _tmp61_;
7309 BalaErrorDomain* _tmp62_;
7310 BalaErrorDomain* _tmp63_;
7311 _tmp61_ = error_type;
7312 _tmp62_ = bala_error_type_get_error_domain (_tmp61_);
7313 _tmp63_ = _tmp62_;
7314 bala_ccode_base_module_generate_error_domain_declaration (self, _tmp63_, decl_space);
7315 } else {
7316 BalaClass* _tmp64_;
7317 _tmp64_ = self->priv->gerror;
7318 bala_ccode_base_module_generate_class_declaration (self, _tmp64_, decl_space);
7319 }
7320 _bala_code_node_unref0 (error_type)((error_type == ((void*)0)) ? ((void*)0) : (error_type = (bala_code_node_unref
(error_type), ((void*)0))))
;
7321 } else {
7322 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7323 BalaPointerType* pointer_type = NULL((void*)0);
7324 BalaPointerType* _tmp65_;
7325 BalaPointerType* _tmp66_;
7326 BalaDataType* _tmp67_;
7327 BalaDataType* _tmp68_;
7328 _tmp65_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_POINTER_TYPE, BalaPointerType)(((BalaPointerType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_pointer_type_get_type ())))))
);
7329 pointer_type = _tmp65_;
7330 _tmp66_ = pointer_type;
7331 _tmp67_ = bala_pointer_type_get_base_type (_tmp66_);
7332 _tmp68_ = _tmp67_;
7333 bala_ccode_base_module_generate_type_declaration (self, _tmp68_, decl_space);
7334 _bala_code_node_unref0 (pointer_type)((pointer_type == ((void*)0)) ? ((void*)0) : (pointer_type = (
bala_code_node_unref (pointer_type), ((void*)0))))
;
7335 } else {
7336 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_METHOD_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_method_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7337 BalaMethod* method = NULL((void*)0);
7338 BalaMethod* _tmp69_;
7339 BalaMethod* _tmp70_;
7340 BalaMethod* _tmp71_;
7341 gboolean _tmp72_ = FALSE(0);
7342 BalaMethod* _tmp73_;
7343 _tmp69_ = bala_method_type_get_method_symbol (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_METHOD_TYPE, BalaMethodType)(((BalaMethodType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_method_type_get_type ())))))
);
7344 _tmp70_ = _tmp69_;
7345 _tmp71_ = _bala_code_node_ref0 (_tmp70_);
7346 method = _tmp71_;
7347 _tmp73_ = method;
7348 if (bala_method_has_type_parameters (_tmp73_)) {
7349 BalaMethod* _tmp74_;
7350 _tmp74_ = method;
7351 _tmp72_ = !bala_get_ccode_simple_generics (_tmp74_);
7352 } else {
7353 _tmp72_ = FALSE(0);
7354 }
7355 if (_tmp72_) {
7356 BalaTypeSymbol* _tmp75_;
7357 _tmp75_ = self->gtype_type;
7358 bala_ccode_base_module_generate_struct_declaration (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp75_), ((bala_struct_get_type ())))))
, decl_space);
7359 }
7360 _bala_code_node_unref0 (method)((method == ((void*)0)) ? ((void*)0) : (method = (bala_code_node_unref
(method), ((void*)0))))
;
7361 }
7362 }
7363 }
7364 }
7365 }
7366 }
7367 }
7368 }
7369 {
7370 BalaList* _type_arg_list = NULL((void*)0);
7371 BalaList* _tmp76_;
7372 BalaList* _tmp77_;
7373 gint _type_arg_size = 0;
7374 BalaList* _tmp78_;
7375 gint _tmp79_;
7376 gint _tmp80_;
7377 gint _type_arg_index = 0;
7378 _tmp76_ = bala_data_type_get_type_arguments (type);
7379 _tmp77_ = _bala_iterable_ref0 (_tmp76_);
7380 _type_arg_list = _tmp77_;
7381 _tmp78_ = _type_arg_list;
7382 _tmp79_ = bala_collection_get_size ((BalaCollection*) _tmp78_);
7383 _tmp80_ = _tmp79_;
7384 _type_arg_size = _tmp80_;
7385 _type_arg_index = -1;
7386 while (TRUE(!(0))) {
7387 gint _tmp81_;
7388 gint _tmp82_;
7389 BalaDataType* type_arg = NULL((void*)0);
7390 BalaList* _tmp83_;
7391 gpointer _tmp84_;
7392 BalaDataType* _tmp85_;
7393 _type_arg_index = _type_arg_index + 1;
7394 _tmp81_ = _type_arg_index;
7395 _tmp82_ = _type_arg_size;
7396 if (!(_tmp81_ < _tmp82_)) {
7397 break;
7398 }
7399 _tmp83_ = _type_arg_list;
7400 _tmp84_ = bala_list_get (_tmp83_, _type_arg_index);
7401 type_arg = (BalaDataType*) _tmp84_;
7402 _tmp85_ = type_arg;
7403 bala_ccode_base_module_generate_type_declaration (self, _tmp85_, decl_space);
7404 _bala_code_node_unref0 (type_arg)((type_arg == ((void*)0)) ? ((void*)0) : (type_arg = (bala_code_node_unref
(type_arg), ((void*)0))))
;
7405 }
7406 _bala_iterable_unref0 (_type_arg_list)((_type_arg_list == ((void*)0)) ? ((void*)0) : (_type_arg_list
= (bala_iterable_unref (_type_arg_list), ((void*)0))))
;
7407 }
7408}
7409
7410static void
7411bala_ccode_base_module_real_generate_class_struct_declaration (BalaCCodeBaseModule* self,
7412 BalaClass* cl,
7413 BalaCCodeFile* decl_space)
7414{
7415 g_return_if_fail (cl != NULL)do { if ((cl != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cl != NULL");
return; } } while (0)
;
7416 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
7417}
7418
7419void
7420bala_ccode_base_module_generate_class_struct_declaration (BalaCCodeBaseModule* self,
7421 BalaClass* cl,
7422 BalaCCodeFile* decl_space)
7423{
7424 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
7425 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_class_struct_declaration (self, cl, decl_space);
7426}
7427
7428static void
7429bala_ccode_base_module_real_generate_struct_declaration (BalaCCodeBaseModule* self,
7430 BalaStruct* st,
7431 BalaCCodeFile* decl_space)
7432{
7433 g_return_if_fail (st != NULL)do { if ((st != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "st != NULL");
return; } } while (0)
;
7434 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
7435}
7436
7437void
7438bala_ccode_base_module_generate_struct_declaration (BalaCCodeBaseModule* self,
7439 BalaStruct* st,
7440 BalaCCodeFile* decl_space)
7441{
7442 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
7443 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_struct_declaration (self, st, decl_space);
7444}
7445
7446static void
7447bala_ccode_base_module_real_generate_delegate_declaration (BalaCCodeBaseModule* self,
7448 BalaDelegate* d,
7449 BalaCCodeFile* decl_space)
7450{
7451 g_return_if_fail (d != NULL)do { if ((d != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "d != NULL"); return
; } } while (0)
;
7452 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
7453}
7454
7455void
7456bala_ccode_base_module_generate_delegate_declaration (BalaCCodeBaseModule* self,
7457 BalaDelegate* d,
7458 BalaCCodeFile* decl_space)
7459{
7460 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
7461 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_delegate_declaration (self, d, decl_space);
7462}
7463
7464static void
7465bala_ccode_base_module_real_generate_cparameters (BalaCCodeBaseModule* self,
7466 BalaMethod* m,
7467 BalaCCodeFile* decl_space,
7468 BalaMap* cparam_map,
7469 BalaCCodeFunction* func,
7470 BalaCCodeFunctionDeclarator* vdeclarator,
7471 BalaMap* carg_map,
7472 BalaCCodeFunctionCall* vcall,
7473 gint direction)
7474{
7475 g_return_if_fail (m != NULL)do { if ((m != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "m != NULL"); return
; } } while (0)
;
7476 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
7477 g_return_if_fail (cparam_map != NULL)do { if ((cparam_map != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cparam_map != NULL"
); return; } } while (0)
;
7478 g_return_if_fail (func != NULL)do { if ((func != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "func != NULL"
); return; } } while (0)
;
7479}
7480
7481void
7482bala_ccode_base_module_generate_cparameters (BalaCCodeBaseModule* self,
7483 BalaMethod* m,
7484 BalaCCodeFile* decl_space,
7485 BalaMap* cparam_map,
7486 BalaCCodeFunction* func,
7487 BalaCCodeFunctionDeclarator* vdeclarator,
7488 BalaMap* carg_map,
7489 BalaCCodeFunctionCall* vcall,
7490 gint direction)
7491{
7492 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
7493 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_cparameters (self, m, decl_space, cparam_map, func, vdeclarator, carg_map, vcall, direction);
7494}
7495
7496void
7497bala_ccode_base_module_generate_property_accessor_declaration (BalaCCodeBaseModule* self,
7498 BalaPropertyAccessor* acc,
7499 BalaCCodeFile* decl_space)
7500{
7501 gchar* _tmp0_;
7502 gchar* _tmp1_;
7503 gboolean _tmp2_;
7504 BalaProperty* prop = NULL((void*)0);
7505 BalaProperty* _tmp3_;
7506 BalaProperty* _tmp4_;
7507 BalaProperty* _tmp5_;
7508 gboolean _tmp6_ = FALSE(0);
7509 gboolean _tmp7_;
7510 gboolean _tmp8_;
7511 gboolean returns_real_struct = FALSE(0);
7512 BalaCCodeParameter* cvalueparam = NULL((void*)0);
7513 BalaDataType* _tmp37_;
7514 BalaDataType* _tmp38_;
7515 BalaCCodeFunction* function = NULL((void*)0);
7516 gboolean _tmp39_ = FALSE(0);
7517 gboolean _tmp40_;
7518 gboolean _tmp41_;
7519 BalaProperty* _tmp52_;
7520 BalaMemberBinding _tmp53_;
7521 BalaMemberBinding _tmp54_;
7522 gboolean _tmp78_ = FALSE(0);
7523 gboolean _tmp79_ = FALSE(0);
7524 gboolean _tmp80_;
7525 gboolean _tmp81_;
7526 gboolean _tmp86_ = FALSE(0);
7527 BalaDataType* _tmp87_;
7528 BalaDataType* _tmp88_;
7529 BalaProperty* _tmp158_;
7530 BalaVersionAttribute* _tmp159_;
7531 BalaVersionAttribute* _tmp160_;
7532 gboolean _tmp161_;
7533 gboolean _tmp162_;
7534 gboolean _tmp170_ = FALSE(0);
7535 BalaProperty* _tmp171_;
7536 gboolean _tmp172_;
7537 gboolean _tmp173_;
7538 BalaCCodeFunction* _tmp200_;
7539 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
7540 g_return_if_fail (acc != NULL)do { if ((acc != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "acc != NULL")
; return; } } while (0)
;
7541 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
7542 _tmp0_ = bala_get_ccode_name ((BalaCodeNode*) acc);
7543 _tmp1_ = _tmp0_;
7544 _tmp2_ = bala_ccode_base_module_add_symbol_declaration (self, decl_space, (BalaSymbol*) acc, _tmp1_);
7545 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
7546 if (_tmp2_) {
7547 return;
7548 }
7549 _tmp3_ = bala_property_accessor_get_prop (acc);
7550 _tmp4_ = _tmp3_;
7551 _tmp5_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp4_, BALA_TYPE_PROPERTY, BalaProperty)(((BalaProperty*) g_type_check_instance_cast ((GTypeInstance*
) (_tmp4_), ((bala_property_get_type ())))))
);
7552 prop = _tmp5_;
7553 _tmp7_ = bala_property_accessor_get_readable (acc);
7554 _tmp8_ = _tmp7_;
7555 if (_tmp8_) {
7556 BalaProperty* _tmp9_;
7557 BalaDataType* _tmp10_;
7558 BalaDataType* _tmp11_;
7559 _tmp9_ = prop;
7560 _tmp10_ = bala_property_get_property_type (_tmp9_);
7561 _tmp11_ = _tmp10_;
7562 _tmp6_ = bala_data_type_is_real_non_null_struct_type (_tmp11_);
7563 } else {
7564 _tmp6_ = FALSE(0);
7565 }
7566 returns_real_struct = _tmp6_;
7567 if (returns_real_struct) {
7568 BalaDataType* _tmp12_;
7569 BalaDataType* _tmp13_;
7570 gchar* _tmp14_;
7571 gchar* _tmp15_;
7572 gchar* _tmp16_;
7573 gchar* _tmp17_;
7574 BalaCCodeParameter* _tmp18_;
7575 _tmp12_ = bala_property_accessor_get_value_type (acc);
7576 _tmp13_ = _tmp12_;
7577 _tmp14_ = bala_get_ccode_name ((BalaCodeNode*) _tmp13_);
7578 _tmp15_ = _tmp14_;
7579 _tmp16_ = g_strdup_printf ("%s *", _tmp15_);
7580 _tmp17_ = _tmp16_;
7581 _tmp18_ = bala_ccode_parameter_new ("result", _tmp17_);
7582 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
7583 cvalueparam = _tmp18_;
7584 _g_free0 (_tmp17_)(_tmp17_ = (g_free (_tmp17_), ((void*)0)));
7585 _g_free0 (_tmp15_)(_tmp15_ = (g_free (_tmp15_), ((void*)0)));
7586 } else {
7587 gboolean _tmp19_ = FALSE(0);
7588 gboolean _tmp20_;
7589 gboolean _tmp21_;
7590 _tmp20_ = bala_property_accessor_get_readable (acc);
7591 _tmp21_ = _tmp20_;
7592 if (!_tmp21_) {
7593 BalaProperty* _tmp22_;
7594 BalaDataType* _tmp23_;
7595 BalaDataType* _tmp24_;
7596 _tmp22_ = prop;
7597 _tmp23_ = bala_property_get_property_type (_tmp22_);
7598 _tmp24_ = _tmp23_;
7599 _tmp19_ = bala_data_type_is_real_non_null_struct_type (_tmp24_);
7600 } else {
7601 _tmp19_ = FALSE(0);
7602 }
7603 if (_tmp19_) {
7604 BalaDataType* _tmp25_;
7605 BalaDataType* _tmp26_;
7606 gchar* _tmp27_;
7607 gchar* _tmp28_;
7608 gchar* _tmp29_;
7609 gchar* _tmp30_;
7610 BalaCCodeParameter* _tmp31_;
7611 _tmp25_ = bala_property_accessor_get_value_type (acc);
7612 _tmp26_ = _tmp25_;
7613 _tmp27_ = bala_get_ccode_name ((BalaCodeNode*) _tmp26_);
7614 _tmp28_ = _tmp27_;
7615 _tmp29_ = g_strdup_printf ("%s *", _tmp28_);
7616 _tmp30_ = _tmp29_;
7617 _tmp31_ = bala_ccode_parameter_new ("value", _tmp30_);
7618 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
7619 cvalueparam = _tmp31_;
7620 _g_free0 (_tmp30_)(_tmp30_ = (g_free (_tmp30_), ((void*)0)));
7621 _g_free0 (_tmp28_)(_tmp28_ = (g_free (_tmp28_), ((void*)0)));
7622 } else {
7623 BalaDataType* _tmp32_;
7624 BalaDataType* _tmp33_;
7625 gchar* _tmp34_;
7626 gchar* _tmp35_;
7627 BalaCCodeParameter* _tmp36_;
7628 _tmp32_ = bala_property_accessor_get_value_type (acc);
7629 _tmp33_ = _tmp32_;
7630 _tmp34_ = bala_get_ccode_name ((BalaCodeNode*) _tmp33_);
7631 _tmp35_ = _tmp34_;
7632 _tmp36_ = bala_ccode_parameter_new ("value", _tmp35_);
7633 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
7634 cvalueparam = _tmp36_;
7635 _g_free0 (_tmp35_)(_tmp35_ = (g_free (_tmp35_), ((void*)0)));
7636 }
7637 }
7638 _tmp37_ = bala_property_accessor_get_value_type (acc);
7639 _tmp38_ = _tmp37_;
7640 bala_ccode_base_module_generate_type_declaration (self, _tmp38_, decl_space);
7641 _tmp40_ = bala_property_accessor_get_readable (acc);
7642 _tmp41_ = _tmp40_;
7643 if (_tmp41_) {
7644 _tmp39_ = !returns_real_struct;
7645 } else {
7646 _tmp39_ = FALSE(0);
7647 }
7648 if (_tmp39_) {
7649 gchar* _tmp42_;
7650 gchar* _tmp43_;
7651 BalaDataType* _tmp44_;
7652 BalaDataType* _tmp45_;
7653 gchar* _tmp46_;
7654 gchar* _tmp47_;
7655 BalaCCodeFunction* _tmp48_;
7656 _tmp42_ = bala_get_ccode_name ((BalaCodeNode*) acc);
7657 _tmp43_ = _tmp42_;
7658 _tmp44_ = bala_property_accessor_get_value_type (acc);
7659 _tmp45_ = _tmp44_;
7660 _tmp46_ = bala_get_ccode_name ((BalaCodeNode*) _tmp45_);
7661 _tmp47_ = _tmp46_;
7662 _tmp48_ = bala_ccode_function_new (_tmp43_, _tmp47_);
7663 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
7664 function = _tmp48_;
7665 _g_free0 (_tmp47_)(_tmp47_ = (g_free (_tmp47_), ((void*)0)));
7666 _g_free0 (_tmp43_)(_tmp43_ = (g_free (_tmp43_), ((void*)0)));
7667 } else {
7668 gchar* _tmp49_;
7669 gchar* _tmp50_;
7670 BalaCCodeFunction* _tmp51_;
7671 _tmp49_ = bala_get_ccode_name ((BalaCodeNode*) acc);
7672 _tmp50_ = _tmp49_;
7673 _tmp51_ = bala_ccode_function_new (_tmp50_, "void");
7674 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
7675 function = _tmp51_;
7676 _g_free0 (_tmp50_)(_tmp50_ = (g_free (_tmp50_), ((void*)0)));
7677 }
7678 _tmp52_ = prop;
7679 _tmp53_ = bala_property_get_binding (_tmp52_);
7680 _tmp54_ = _tmp53_;
7681 if (_tmp54_ == BALA_MEMBER_BINDING_INSTANCE) {
7682 BalaTypeSymbol* t = NULL((void*)0);
7683 BalaProperty* _tmp55_;
7684 BalaSymbol* _tmp56_;
7685 BalaSymbol* _tmp57_;
7686 BalaTypeSymbol* _tmp58_;
7687 BalaDataType* this_type = NULL((void*)0);
7688 BalaTypeSymbol* _tmp59_;
7689 BalaDataType* _tmp60_;
7690 BalaDataType* _tmp61_;
7691 BalaCCodeParameter* cselfparam = NULL((void*)0);
7692 BalaDataType* _tmp62_;
7693 gchar* _tmp63_;
7694 gchar* _tmp64_;
7695 BalaCCodeParameter* _tmp65_;
7696 BalaCCodeParameter* _tmp66_;
7697 gboolean _tmp67_ = FALSE(0);
7698 BalaTypeSymbol* _tmp68_;
7699 BalaCCodeFunction* _tmp76_;
7700 BalaCCodeParameter* _tmp77_;
7701 _tmp55_ = prop;
7702 _tmp56_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp55_);
7703 _tmp57_ = _tmp56_;
7704 _tmp58_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp57_), ((bala_typesymbol_get_type ())))))
);
7705 t = _tmp58_;
7706 _tmp59_ = t;
7707 _tmp60_ = bala_semantic_analyzer_get_data_type_for_symbol ((BalaSymbol*) _tmp59_);
7708 this_type = _tmp60_;
7709 _tmp61_ = this_type;
7710 bala_ccode_base_module_generate_type_declaration (self, _tmp61_, decl_space);
7711 _tmp62_ = this_type;
7712 _tmp63_ = bala_get_ccode_name ((BalaCodeNode*) _tmp62_);
7713 _tmp64_ = _tmp63_;
7714 _tmp65_ = bala_ccode_parameter_new ("self", _tmp64_);
7715 _tmp66_ = _tmp65_;
7716 _g_free0 (_tmp64_)(_tmp64_ = (g_free (_tmp64_), ((void*)0)));
7717 cselfparam = _tmp66_;
7718 _tmp68_ = t;
7719 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp68_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp68_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7720 BalaTypeSymbol* _tmp69_;
7721 _tmp69_ = t;
7722 _tmp67_ = !bala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp69_), ((bala_struct_get_type ())))))
);
7723 } else {
7724 _tmp67_ = FALSE(0);
7725 }
7726 if (_tmp67_) {
7727 BalaCCodeParameter* _tmp70_;
7728 BalaCCodeParameter* _tmp71_;
7729 const gchar* _tmp72_;
7730 const gchar* _tmp73_;
7731 gchar* _tmp74_;
7732 gchar* _tmp75_;
7733 _tmp70_ = cselfparam;
7734 _tmp71_ = cselfparam;
7735 _tmp72_ = bala_ccode_parameter_get_type_name (_tmp71_);
7736 _tmp73_ = _tmp72_;
7737 _tmp74_ = g_strconcat (_tmp73_, "*", NULL((void*)0));
7738 _tmp75_ = _tmp74_;
7739 bala_ccode_parameter_set_type_name (_tmp71_, _tmp75_);
7740 _g_free0 (_tmp75_)(_tmp75_ = (g_free (_tmp75_), ((void*)0)));
7741 }
7742 _tmp76_ = function;
7743 _tmp77_ = cselfparam;
7744 bala_ccode_function_add_parameter (_tmp76_, _tmp77_);
7745 _bala_ccode_node_unref0 (cselfparam)((cselfparam == ((void*)0)) ? ((void*)0) : (cselfparam = (bala_ccode_node_unref
(cselfparam), ((void*)0))))
;
7746 _bala_code_node_unref0 (this_type)((this_type == ((void*)0)) ? ((void*)0) : (this_type = (bala_code_node_unref
(this_type), ((void*)0))))
;
7747 _bala_code_node_unref0 (t)((t == ((void*)0)) ? ((void*)0) : (t = (bala_code_node_unref (
t), ((void*)0))))
;
7748 }
7749 _tmp80_ = bala_property_accessor_get_writable (acc);
7750 _tmp81_ = _tmp80_;
7751 if (_tmp81_) {
7752 _tmp79_ = TRUE(!(0));
7753 } else {
7754 gboolean _tmp82_;
7755 gboolean _tmp83_;
7756 _tmp82_ = bala_property_accessor_get_construction (acc);
7757 _tmp83_ = _tmp82_;
7758 _tmp79_ = _tmp83_;
7759 }
7760 if (_tmp79_) {
7761 _tmp78_ = TRUE(!(0));
7762 } else {
7763 _tmp78_ = returns_real_struct;
7764 }
7765 if (_tmp78_) {
7766 BalaCCodeFunction* _tmp84_;
7767 BalaCCodeParameter* _tmp85_;
7768 _tmp84_ = function;
7769 _tmp85_ = cvalueparam;
7770 bala_ccode_function_add_parameter (_tmp84_, _tmp85_);
7771 }
7772 _tmp87_ = bala_property_accessor_get_value_type (acc);
7773 _tmp88_ = _tmp87_;
7774 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp88_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp88_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7775 BalaProperty* _tmp89_;
7776 _tmp89_ = prop;
7777 _tmp86_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp89_);
7778 } else {
7779 _tmp86_ = FALSE(0);
7780 }
7781 if (_tmp86_) {
7782 BalaArrayType* array_type = NULL((void*)0);
7783 BalaDataType* _tmp90_;
7784 BalaDataType* _tmp91_;
7785 BalaArrayType* _tmp92_;
7786 gchar* length_ctype = NULL((void*)0);
7787 BalaProperty* _tmp93_;
7788 gchar* _tmp94_;
7789 _tmp90_ = bala_property_accessor_get_value_type (acc);
7790 _tmp91_ = _tmp90_;
7791 _tmp92_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp91_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp91_), ((bala_array_type_get_type ())))))
);
7792 array_type = _tmp92_;
7793 _tmp93_ = prop;
7794 _tmp94_ = bala_get_ccode_array_length_type ((BalaCodeNode*) _tmp93_);
7795 length_ctype = _tmp94_;
7796 {
7797 gint dim = 0;
7798 dim = 1;
7799 {
7800 gboolean _tmp95_ = FALSE(0);
7801 _tmp95_ = TRUE(!(0));
7802 while (TRUE(!(0))) {
7803 BalaArrayType* _tmp97_;
7804 gint _tmp98_;
7805 gint _tmp99_;
7806 const gchar* _tmp100_ = NULL((void*)0);
7807 gboolean _tmp101_;
7808 gboolean _tmp102_;
7809 gchar* _tmp103_ = NULL((void*)0);
7810 gboolean _tmp104_;
7811 gboolean _tmp105_;
7812 BalaCCodeFunction* _tmp110_;
7813 gchar* _tmp111_;
7814 gchar* _tmp112_;
7815 BalaCCodeParameter* _tmp113_;
7816 BalaCCodeParameter* _tmp114_;
7817 if (!_tmp95_) {
7818 gint _tmp96_;
7819 _tmp96_ = dim;
7820 dim = _tmp96_ + 1;
7821 }
7822 _tmp95_ = FALSE(0);
7823 _tmp97_ = array_type;
7824 _tmp98_ = bala_array_type_get_rank (_tmp97_);
7825 _tmp99_ = _tmp98_;
7826 if (!(dim <= _tmp99_)) {
7827 break;
7828 }
7829 _tmp101_ = bala_property_accessor_get_readable (acc);
7830 _tmp102_ = _tmp101_;
7831 if (_tmp102_) {
7832 _tmp100_ = "result";
7833 } else {
7834 _tmp100_ = "value";
7835 }
7836 _tmp104_ = bala_property_accessor_get_readable (acc);
7837 _tmp105_ = _tmp104_;
7838 if (_tmp105_) {
7839 const gchar* _tmp106_;
7840 gchar* _tmp107_;
7841 _tmp106_ = length_ctype;
7842 _tmp107_ = g_strconcat (_tmp106_, "*", NULL((void*)0));
7843 _g_free0 (_tmp103_)(_tmp103_ = (g_free (_tmp103_), ((void*)0)));
7844 _tmp103_ = _tmp107_;
7845 } else {
7846 const gchar* _tmp108_;
7847 gchar* _tmp109_;
7848 _tmp108_ = length_ctype;
7849 _tmp109_ = g_strdup (_tmp108_);
7850 _g_free0 (_tmp103_)(_tmp103_ = (g_free (_tmp103_), ((void*)0)));
7851 _tmp103_ = _tmp109_;
7852 }
7853 _tmp110_ = function;
7854 _tmp111_ = bala_ccode_base_module_get_array_length_cname (self, _tmp100_, dim);
7855 _tmp112_ = _tmp111_;
7856 _tmp113_ = bala_ccode_parameter_new (_tmp112_, _tmp103_);
7857 _tmp114_ = _tmp113_;
7858 bala_ccode_function_add_parameter (_tmp110_, _tmp114_);
7859 _bala_ccode_node_unref0 (_tmp114_)((_tmp114_ == ((void*)0)) ? ((void*)0) : (_tmp114_ = (bala_ccode_node_unref
(_tmp114_), ((void*)0))))
;
7860 _g_free0 (_tmp112_)(_tmp112_ = (g_free (_tmp112_), ((void*)0)));
7861 _g_free0 (_tmp103_)(_tmp103_ = (g_free (_tmp103_), ((void*)0)));
7862 }
7863 }
7864 }
7865 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
7866 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
7867 } else {
7868 gboolean _tmp115_ = FALSE(0);
7869 gboolean _tmp116_ = FALSE(0);
7870 BalaDataType* _tmp117_;
7871 BalaDataType* _tmp118_;
7872 _tmp117_ = bala_property_accessor_get_value_type (acc);
7873 _tmp118_ = _tmp117_;
7874 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp118_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp118_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7875 BalaProperty* _tmp119_;
7876 _tmp119_ = prop;
7877 _tmp116_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp119_);
7878 } else {
7879 _tmp116_ = FALSE(0);
7880 }
7881 if (_tmp116_) {
7882 BalaDataType* _tmp120_;
7883 BalaDataType* _tmp121_;
7884 BalaDelegate* _tmp122_;
7885 BalaDelegate* _tmp123_;
7886 gboolean _tmp124_;
7887 gboolean _tmp125_;
7888 _tmp120_ = bala_property_accessor_get_value_type (acc);
7889 _tmp121_ = _tmp120_;
7890 _tmp122_ = bala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp121_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp121_), ((bala_delegate_type_get_type ())))))
);
7891 _tmp123_ = _tmp122_;
7892 _tmp124_ = bala_delegate_get_has_target (_tmp123_);
7893 _tmp125_ = _tmp124_;
7894 _tmp115_ = _tmp125_;
7895 } else {
7896 _tmp115_ = FALSE(0);
7897 }
7898 if (_tmp115_) {
7899 const gchar* _tmp126_ = NULL((void*)0);
7900 gboolean _tmp127_;
7901 gboolean _tmp128_;
7902 gchar* _tmp129_ = NULL((void*)0);
7903 gboolean _tmp130_;
7904 gboolean _tmp131_;
7905 BalaCCodeFunction* _tmp138_;
7906 gchar* _tmp139_;
7907 gchar* _tmp140_;
7908 BalaCCodeParameter* _tmp141_;
7909 BalaCCodeParameter* _tmp142_;
7910 gboolean _tmp143_ = FALSE(0);
7911 gboolean _tmp144_;
7912 gboolean _tmp145_;
7913 _tmp127_ = bala_property_accessor_get_readable (acc);
7914 _tmp128_ = _tmp127_;
7915 if (_tmp128_) {
7916 _tmp126_ = "result";
7917 } else {
7918 _tmp126_ = "value";
7919 }
7920 _tmp130_ = bala_property_accessor_get_readable (acc);
7921 _tmp131_ = _tmp130_;
7922 if (_tmp131_) {
7923 BalaDataType* _tmp132_;
7924 gchar* _tmp133_;
7925 gchar* _tmp134_;
7926 gchar* _tmp135_;
7927 _tmp132_ = self->delegate_target_type;
7928 _tmp133_ = bala_get_ccode_name ((BalaCodeNode*) _tmp132_);
7929 _tmp134_ = _tmp133_;
7930 _tmp135_ = g_strconcat (_tmp134_, "*", NULL((void*)0));
7931 _g_free0 (_tmp129_)(_tmp129_ = (g_free (_tmp129_), ((void*)0)));
7932 _tmp129_ = _tmp135_;
7933 _g_free0 (_tmp134_)(_tmp134_ = (g_free (_tmp134_), ((void*)0)));
7934 } else {
7935 BalaDataType* _tmp136_;
7936 gchar* _tmp137_;
7937 _tmp136_ = self->delegate_target_type;
7938 _tmp137_ = bala_get_ccode_name ((BalaCodeNode*) _tmp136_);
7939 _g_free0 (_tmp129_)(_tmp129_ = (g_free (_tmp129_), ((void*)0)));
7940 _tmp129_ = _tmp137_;
7941 }
7942 _tmp138_ = function;
7943 _tmp139_ = bala_ccode_base_module_get_delegate_target_cname (self, _tmp126_);
7944 _tmp140_ = _tmp139_;
7945 _tmp141_ = bala_ccode_parameter_new (_tmp140_, _tmp129_);
7946 _tmp142_ = _tmp141_;
7947 bala_ccode_function_add_parameter (_tmp138_, _tmp142_);
7948 _bala_ccode_node_unref0 (_tmp142_)((_tmp142_ == ((void*)0)) ? ((void*)0) : (_tmp142_ = (bala_ccode_node_unref
(_tmp142_), ((void*)0))))
;
7949 _g_free0 (_tmp140_)(_tmp140_ = (g_free (_tmp140_), ((void*)0)));
7950 _tmp144_ = bala_property_accessor_get_readable (acc);
7951 _tmp145_ = _tmp144_;
7952 if (!_tmp145_) {
7953 BalaDataType* _tmp146_;
7954 BalaDataType* _tmp147_;
7955 gboolean _tmp148_;
7956 gboolean _tmp149_;
7957 _tmp146_ = bala_property_accessor_get_value_type (acc);
7958 _tmp147_ = _tmp146_;
7959 _tmp148_ = bala_data_type_get_value_owned (_tmp147_);
7960 _tmp149_ = _tmp148_;
7961 _tmp143_ = _tmp149_;
7962 } else {
7963 _tmp143_ = FALSE(0);
7964 }
7965 if (_tmp143_) {
7966 BalaCCodeFunction* _tmp150_;
7967 gchar* _tmp151_;
7968 gchar* _tmp152_;
7969 BalaDelegateType* _tmp153_;
7970 gchar* _tmp154_;
7971 gchar* _tmp155_;
7972 BalaCCodeParameter* _tmp156_;
7973 BalaCCodeParameter* _tmp157_;
7974 _tmp150_ = function;
7975 _tmp151_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
7976 _tmp152_ = _tmp151_;
7977 _tmp153_ = self->delegate_target_destroy_type;
7978 _tmp154_ = bala_get_ccode_name ((BalaCodeNode*) _tmp153_);
7979 _tmp155_ = _tmp154_;
7980 _tmp156_ = bala_ccode_parameter_new (_tmp152_, _tmp155_);
7981 _tmp157_ = _tmp156_;
7982 bala_ccode_function_add_parameter (_tmp150_, _tmp157_);
7983 _bala_ccode_node_unref0 (_tmp157_)((_tmp157_ == ((void*)0)) ? ((void*)0) : (_tmp157_ = (bala_ccode_node_unref
(_tmp157_), ((void*)0))))
;
7984 _g_free0 (_tmp155_)(_tmp155_ = (g_free (_tmp155_), ((void*)0)));
7985 _g_free0 (_tmp152_)(_tmp152_ = (g_free (_tmp152_), ((void*)0)));
7986 }
7987 _g_free0 (_tmp129_)(_tmp129_ = (g_free (_tmp129_), ((void*)0)));
7988 }
7989 }
7990 _tmp158_ = prop;
7991 _tmp159_ = bala_symbol_get_version ((BalaSymbol*) _tmp158_);
7992 _tmp160_ = _tmp159_;
7993 _tmp161_ = bala_version_attribute_get_deprecated (_tmp160_);
7994 _tmp162_ = _tmp161_;
7995 if (_tmp162_) {
7996 BalaCodeContext* _tmp163_;
7997 BalaProfile _tmp164_;
7998 BalaProfile _tmp165_;
7999 BalaCCodeFunction* _tmp166_;
8000 BalaCCodeFunction* _tmp167_;
8001 BalaCCodeModifiers _tmp168_;
8002 BalaCCodeModifiers _tmp169_;
8003 _tmp163_ = self->priv->_context;
8004 _tmp164_ = bala_code_context_get_profile (_tmp163_);
8005 _tmp165_ = _tmp164_;
8006 if (_tmp165_ == BALA_PROFILE_GOBJECT) {
8007 bala_ccode_file_add_include (decl_space, "glib.h", FALSE(0));
8008 }
8009 _tmp166_ = function;
8010 _tmp167_ = function;
8011 _tmp168_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp167_);
8012 _tmp169_ = _tmp168_;
8013 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp167_, _tmp169_ | BALA_CCODE_MODIFIERS_DEPRECATED);
8014 }
8015 _tmp171_ = prop;
8016 _tmp172_ = bala_property_get_is_abstract (_tmp171_);
8017 _tmp173_ = _tmp172_;
8018 if (!_tmp173_) {
8019 gboolean _tmp174_ = FALSE(0);
8020 gboolean _tmp175_ = FALSE(0);
8021 BalaProperty* _tmp176_;
8022 _tmp176_ = prop;
8023 if (bala_symbol_is_private_symbol ((BalaSymbol*) _tmp176_)) {
8024 _tmp175_ = TRUE(!(0));
8025 } else {
8026 gboolean _tmp177_ = FALSE(0);
8027 gboolean _tmp178_;
8028 gboolean _tmp179_;
8029 _tmp178_ = bala_property_accessor_get_readable (acc);
8030 _tmp179_ = _tmp178_;
8031 if (!_tmp179_) {
8032 gboolean _tmp180_;
8033 gboolean _tmp181_;
8034 _tmp180_ = bala_property_accessor_get_writable (acc);
8035 _tmp181_ = _tmp180_;
8036 _tmp177_ = !_tmp181_;
8037 } else {
8038 _tmp177_ = FALSE(0);
8039 }
8040 _tmp175_ = _tmp177_;
8041 }
8042 if (_tmp175_) {
8043 _tmp174_ = TRUE(!(0));
8044 } else {
8045 BalaSymbolAccessibility _tmp182_;
8046 BalaSymbolAccessibility _tmp183_;
8047 _tmp182_ = bala_symbol_get_access ((BalaSymbol*) acc);
8048 _tmp183_ = _tmp182_;
8049 _tmp174_ = _tmp183_ == BALA_SYMBOL_ACCESSIBILITY_PRIVATE;
8050 }
8051 _tmp170_ = _tmp174_;
8052 } else {
8053 _tmp170_ = FALSE(0);
8054 }
8055 if (_tmp170_) {
8056 BalaCCodeFunction* _tmp184_;
8057 BalaCCodeFunction* _tmp185_;
8058 BalaCCodeModifiers _tmp186_;
8059 BalaCCodeModifiers _tmp187_;
8060 _tmp184_ = function;
8061 _tmp185_ = function;
8062 _tmp186_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp185_);
8063 _tmp187_ = _tmp186_;
8064 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp185_, _tmp187_ | BALA_CCODE_MODIFIERS_STATIC);
8065 } else {
8066 gboolean _tmp188_ = FALSE(0);
8067 BalaCodeContext* _tmp189_;
8068 gboolean _tmp190_;
8069 gboolean _tmp191_;
8070 _tmp189_ = self->priv->_context;
8071 _tmp190_ = bala_code_context_get_hide_internal (_tmp189_);
8072 _tmp191_ = _tmp190_;
8073 if (_tmp191_) {
8074 gboolean _tmp192_ = FALSE(0);
8075 BalaProperty* _tmp193_;
8076 _tmp193_ = prop;
8077 if (bala_symbol_is_internal_symbol ((BalaSymbol*) _tmp193_)) {
8078 _tmp192_ = TRUE(!(0));
8079 } else {
8080 BalaSymbolAccessibility _tmp194_;
8081 BalaSymbolAccessibility _tmp195_;
8082 _tmp194_ = bala_symbol_get_access ((BalaSymbol*) acc);
8083 _tmp195_ = _tmp194_;
8084 _tmp192_ = _tmp195_ == BALA_SYMBOL_ACCESSIBILITY_INTERNAL;
8085 }
8086 _tmp188_ = _tmp192_;
8087 } else {
8088 _tmp188_ = FALSE(0);
8089 }
8090 if (_tmp188_) {
8091 BalaCCodeFunction* _tmp196_;
8092 BalaCCodeFunction* _tmp197_;
8093 BalaCCodeModifiers _tmp198_;
8094 BalaCCodeModifiers _tmp199_;
8095 _tmp196_ = function;
8096 _tmp197_ = function;
8097 _tmp198_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp197_);
8098 _tmp199_ = _tmp198_;
8099 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp197_, _tmp199_ | BALA_CCODE_MODIFIERS_INTERNAL);
8100 }
8101 }
8102 _tmp200_ = function;
8103 bala_ccode_file_add_function_declaration (decl_space, _tmp200_);
8104 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
8105 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
8106 _bala_code_node_unref0 (prop)((prop == ((void*)0)) ? ((void*)0) : (prop = (bala_code_node_unref
(prop), ((void*)0))))
;
8107}
8108
8109static void
8110bala_ccode_base_module_real_visit_property_accessor (BalaCodeVisitor* base,
8111 BalaPropertyAccessor* acc)
8112{
8113 BalaCCodeBaseModule * self;
8114 BalaCCodeBaseModuleEmitContext* _tmp0_;
8115 BalaCCodeBaseModuleEmitContext* _tmp1_;
8116 BalaSourceReference* _tmp2_;
8117 BalaSourceReference* _tmp3_;
8118 BalaProperty* prop = NULL((void*)0);
8119 BalaProperty* _tmp4_;
8120 BalaProperty* _tmp5_;
8121 BalaProperty* _tmp6_;
8122 BalaComment* _tmp7_;
8123 BalaComment* _tmp8_;
8124 gboolean _tmp16_ = FALSE(0);
8125 gboolean _tmp17_;
8126 gboolean _tmp18_;
8127 gboolean returns_real_struct = FALSE(0);
8128 BalaLocalVariable* _tmp22_;
8129 BalaLocalVariable* _tmp23_;
8130 BalaTypeSymbol* t = NULL((void*)0);
8131 BalaProperty* _tmp26_;
8132 BalaSymbol* _tmp27_;
8133 BalaSymbol* _tmp28_;
8134 BalaTypeSymbol* _tmp29_;
8135 gboolean _tmp30_ = FALSE(0);
8136 gboolean _tmp31_ = FALSE(0);
8137 BalaProperty* _tmp32_;
8138 gboolean _tmp33_;
8139 gboolean _tmp34_;
8140 BalaSourceFileType _tmp64_;
8141 BalaSourceFileType _tmp65_;
8142 BalaDataType* this_type = NULL((void*)0);
8143 BalaTypeSymbol* _tmp66_;
8144 BalaDataType* _tmp67_;
8145 BalaCCodeParameter* cselfparam = NULL((void*)0);
8146 BalaDataType* _tmp68_;
8147 gchar* _tmp69_;
8148 gchar* _tmp70_;
8149 BalaCCodeParameter* _tmp71_;
8150 BalaCCodeParameter* _tmp72_;
8151 gboolean _tmp73_ = FALSE(0);
8152 BalaTypeSymbol* _tmp74_;
8153 BalaCCodeParameter* cvalueparam = NULL((void*)0);
8154 gboolean _tmp107_ = FALSE(0);
8155 BalaProperty* _tmp108_;
8156 gboolean _tmp109_;
8157 gboolean _tmp110_;
8158 gboolean _tmp408_ = FALSE(0);
8159 BalaProperty* _tmp409_;
8160 gboolean _tmp410_;
8161 gboolean _tmp411_;
8162 self = (BalaCCodeBaseModule*) base;
8163 g_return_if_fail (acc != NULL)do { if ((acc != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "acc != NULL")
; return; } } while (0)
;
8164 _tmp0_ = bala_ccode_base_module_emit_context_new ((BalaSymbol*) acc);
8165 _tmp1_ = _tmp0_;
8166 bala_ccode_base_module_push_context (self, _tmp1_);
8167 _bala_ccode_base_module_emit_context_unref0 (_tmp1_)((_tmp1_ == ((void*)0)) ? ((void*)0) : (_tmp1_ = (bala_ccode_base_module_emit_context_unref
(_tmp1_), ((void*)0))))
;
8168 _tmp2_ = bala_code_node_get_source_reference ((BalaCodeNode*) acc);
8169 _tmp3_ = _tmp2_;
8170 bala_ccode_base_module_push_line (self, _tmp3_);
8171 _tmp4_ = bala_property_accessor_get_prop (acc);
8172 _tmp5_ = _tmp4_;
8173 _tmp6_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp5_, BALA_TYPE_PROPERTY, BalaProperty)(((BalaProperty*) g_type_check_instance_cast ((GTypeInstance*
) (_tmp5_), ((bala_property_get_type ())))))
);
8174 prop = _tmp6_;
8175 _tmp7_ = bala_symbol_get_comment ((BalaSymbol*) acc);
8176 _tmp8_ = _tmp7_;
8177 if (_tmp8_ != NULL((void*)0)) {
8178 BalaCCodeFile* _tmp9_;
8179 BalaComment* _tmp10_;
8180 BalaComment* _tmp11_;
8181 const gchar* _tmp12_;
8182 const gchar* _tmp13_;
8183 BalaCCodeComment* _tmp14_;
8184 BalaCCodeComment* _tmp15_;
8185 _tmp9_ = self->cfile;
8186 _tmp10_ = bala_symbol_get_comment ((BalaSymbol*) acc);
8187 _tmp11_ = _tmp10_;
8188 _tmp12_ = bala_comment_get_content (_tmp11_);
8189 _tmp13_ = _tmp12_;
8190 _tmp14_ = bala_ccode_comment_new (_tmp13_);
8191 _tmp15_ = _tmp14_;
8192 bala_ccode_file_add_type_member_definition (_tmp9_, (BalaCCodeNode*) _tmp15_);
8193 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
8194 }
8195 _tmp17_ = bala_property_accessor_get_readable (acc);
8196 _tmp18_ = _tmp17_;
8197 if (_tmp18_) {
8198 BalaProperty* _tmp19_;
8199 BalaDataType* _tmp20_;
8200 BalaDataType* _tmp21_;
8201 _tmp19_ = prop;
8202 _tmp20_ = bala_property_get_property_type (_tmp19_);
8203 _tmp21_ = _tmp20_;
8204 _tmp16_ = bala_data_type_is_real_non_null_struct_type (_tmp21_);
8205 } else {
8206 _tmp16_ = FALSE(0);
8207 }
8208 returns_real_struct = _tmp16_;
8209 _tmp22_ = bala_subroutine_get_result_var ((BalaSubroutine*) acc);
8210 _tmp23_ = _tmp22_;
8211 if (_tmp23_ != NULL((void*)0)) {
8212 BalaLocalVariable* _tmp24_;
8213 BalaLocalVariable* _tmp25_;
8214 _tmp24_ = bala_subroutine_get_result_var ((BalaSubroutine*) acc);
8215 _tmp25_ = _tmp24_;
8216 bala_code_node_accept ((BalaCodeNode*) _tmp25_, (BalaCodeVisitor*) self);
8217 }
8218 _tmp26_ = prop;
8219 _tmp27_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp26_);
8220 _tmp28_ = _tmp27_;
8221 _tmp29_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp28_), ((bala_typesymbol_get_type ())))))
);
8222 t = _tmp29_;
8223 _tmp32_ = prop;
8224 _tmp33_ = bala_property_get_is_abstract (_tmp32_);
8225 _tmp34_ = _tmp33_;
8226 if (_tmp34_) {
8227 _tmp31_ = TRUE(!(0));
8228 } else {
8229 BalaProperty* _tmp35_;
8230 gboolean _tmp36_;
8231 gboolean _tmp37_;
8232 _tmp35_ = prop;
8233 _tmp36_ = bala_property_get_is_virtual (_tmp35_);
8234 _tmp37_ = _tmp36_;
8235 _tmp31_ = _tmp37_;
8236 }
8237 if (_tmp31_) {
8238 _tmp30_ = TRUE(!(0));
8239 } else {
8240 gboolean _tmp38_ = FALSE(0);
8241 BalaProperty* _tmp39_;
8242 BalaProperty* _tmp40_;
8243 BalaProperty* _tmp41_;
8244 _tmp39_ = prop;
8245 _tmp40_ = bala_property_get_base_property (_tmp39_);
8246 _tmp41_ = _tmp40_;
8247 if (_tmp41_ == NULL((void*)0)) {
8248 BalaProperty* _tmp42_;
8249 BalaProperty* _tmp43_;
8250 BalaProperty* _tmp44_;
8251 _tmp42_ = prop;
8252 _tmp43_ = bala_property_get_base_interface_property (_tmp42_);
8253 _tmp44_ = _tmp43_;
8254 _tmp38_ = _tmp44_ == NULL((void*)0);
8255 } else {
8256 _tmp38_ = FALSE(0);
8257 }
8258 _tmp30_ = _tmp38_;
8259 }
8260 if (_tmp30_) {
8261 BalaCCodeFile* _tmp45_;
8262 gboolean _tmp46_ = FALSE(0);
8263 gboolean _tmp47_;
8264 gboolean _tmp48_;
8265 _tmp45_ = self->cfile;
8266 bala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp45_);
8267 _tmp47_ = bala_property_accessor_get_readable (acc);
8268 _tmp48_ = _tmp47_;
8269 if (_tmp48_) {
8270 _tmp46_ = TRUE(!(0));
8271 } else {
8272 gboolean _tmp49_;
8273 gboolean _tmp50_;
8274 _tmp49_ = bala_property_accessor_get_writable (acc);
8275 _tmp50_ = _tmp49_;
8276 _tmp46_ = _tmp50_;
8277 }
8278 if (_tmp46_) {
8279 gboolean _tmp51_ = FALSE(0);
8280 BalaProperty* _tmp52_;
8281 gboolean _tmp59_ = FALSE(0);
8282 BalaProperty* _tmp60_;
8283 _tmp52_ = prop;
8284 if (!bala_symbol_is_internal_symbol ((BalaSymbol*) _tmp52_)) {
8285 gboolean _tmp53_ = FALSE(0);
8286 BalaSymbolAccessibility _tmp54_;
8287 BalaSymbolAccessibility _tmp55_;
8288 _tmp54_ = bala_symbol_get_access ((BalaSymbol*) acc);
8289 _tmp55_ = _tmp54_;
8290 if (_tmp55_ == BALA_SYMBOL_ACCESSIBILITY_PUBLIC) {
8291 _tmp53_ = TRUE(!(0));
8292 } else {
8293 BalaSymbolAccessibility _tmp56_;
8294 BalaSymbolAccessibility _tmp57_;
8295 _tmp56_ = bala_symbol_get_access ((BalaSymbol*) acc);
8296 _tmp57_ = _tmp56_;
8297 _tmp53_ = _tmp57_ == BALA_SYMBOL_ACCESSIBILITY_PROTECTED;
8298 }
8299 _tmp51_ = _tmp53_;
8300 } else {
8301 _tmp51_ = FALSE(0);
8302 }
8303 if (_tmp51_) {
8304 BalaCCodeFile* _tmp58_;
8305 _tmp58_ = self->header_file;
8306 bala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp58_);
8307 }
8308 _tmp60_ = prop;
8309 if (!bala_symbol_is_private_symbol ((BalaSymbol*) _tmp60_)) {
8310 BalaSymbolAccessibility _tmp61_;
8311 BalaSymbolAccessibility _tmp62_;
8312 _tmp61_ = bala_symbol_get_access ((BalaSymbol*) acc);
8313 _tmp62_ = _tmp61_;
8314 _tmp59_ = _tmp62_ != BALA_SYMBOL_ACCESSIBILITY_PRIVATE;
8315 } else {
8316 _tmp59_ = FALSE(0);
8317 }
8318 if (_tmp59_) {
8319 BalaCCodeFile* _tmp63_;
8320 _tmp63_ = self->internal_header_file;
8321 bala_ccode_base_module_generate_property_accessor_declaration (self, acc, _tmp63_);
8322 }
8323 }
8324 }
8325 _tmp64_ = bala_symbol_get_source_type ((BalaSymbol*) acc);
8326 _tmp65_ = _tmp64_;
8327 if (_tmp65_ == BALA_SOURCE_FILE_TYPE_FAST) {
8328 bala_ccode_base_module_pop_line (self);
8329 bala_ccode_base_module_pop_context (self);
8330 _bala_code_node_unref0 (t)((t == ((void*)0)) ? ((void*)0) : (t = (bala_code_node_unref (
t), ((void*)0))))
;
8331 _bala_code_node_unref0 (prop)((prop == ((void*)0)) ? ((void*)0) : (prop = (bala_code_node_unref
(prop), ((void*)0))))
;
8332 return;
8333 }
8334 _tmp66_ = t;
8335 _tmp67_ = bala_semantic_analyzer_get_data_type_for_symbol ((BalaSymbol*) _tmp66_);
8336 this_type = _tmp67_;
8337 _tmp68_ = this_type;
8338 _tmp69_ = bala_get_ccode_name ((BalaCodeNode*) _tmp68_);
8339 _tmp70_ = _tmp69_;
8340 _tmp71_ = bala_ccode_parameter_new ("self", _tmp70_);
8341 _tmp72_ = _tmp71_;
8342 _g_free0 (_tmp70_)(_tmp70_ = (g_free (_tmp70_), ((void*)0)));
8343 cselfparam = _tmp72_;
8344 _tmp74_ = t;
8345 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp74_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp74_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
8346 BalaTypeSymbol* _tmp75_;
8347 _tmp75_ = t;
8348 _tmp73_ = !bala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp75_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp75_), ((bala_struct_get_type ())))))
);
8349 } else {
8350 _tmp73_ = FALSE(0);
8351 }
8352 if (_tmp73_) {
8353 BalaCCodeParameter* _tmp76_;
8354 BalaCCodeParameter* _tmp77_;
8355 const gchar* _tmp78_;
8356 const gchar* _tmp79_;
8357 gchar* _tmp80_;
8358 gchar* _tmp81_;
8359 _tmp76_ = cselfparam;
8360 _tmp77_ = cselfparam;
8361 _tmp78_ = bala_ccode_parameter_get_type_name (_tmp77_);
8362 _tmp79_ = _tmp78_;
8363 _tmp80_ = g_strconcat (_tmp79_, "*", NULL((void*)0));
8364 _tmp81_ = _tmp80_;
8365 bala_ccode_parameter_set_type_name (_tmp77_, _tmp81_);
8366 _g_free0 (_tmp81_)(_tmp81_ = (g_free (_tmp81_), ((void*)0)));
8367 }
8368 if (returns_real_struct) {
8369 BalaDataType* _tmp82_;
8370 BalaDataType* _tmp83_;
8371 gchar* _tmp84_;
8372 gchar* _tmp85_;
8373 gchar* _tmp86_;
8374 gchar* _tmp87_;
8375 BalaCCodeParameter* _tmp88_;
8376 _tmp82_ = bala_property_accessor_get_value_type (acc);
8377 _tmp83_ = _tmp82_;
8378 _tmp84_ = bala_get_ccode_name ((BalaCodeNode*) _tmp83_);
8379 _tmp85_ = _tmp84_;
8380 _tmp86_ = g_strdup_printf ("%s *", _tmp85_);
8381 _tmp87_ = _tmp86_;
8382 _tmp88_ = bala_ccode_parameter_new ("result", _tmp87_);
8383 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
8384 cvalueparam = _tmp88_;
8385 _g_free0 (_tmp87_)(_tmp87_ = (g_free (_tmp87_), ((void*)0)));
8386 _g_free0 (_tmp85_)(_tmp85_ = (g_free (_tmp85_), ((void*)0)));
8387 } else {
8388 gboolean _tmp89_ = FALSE(0);
8389 gboolean _tmp90_;
8390 gboolean _tmp91_;
8391 _tmp90_ = bala_property_accessor_get_readable (acc);
8392 _tmp91_ = _tmp90_;
8393 if (!_tmp91_) {
8394 BalaProperty* _tmp92_;
8395 BalaDataType* _tmp93_;
8396 BalaDataType* _tmp94_;
8397 _tmp92_ = prop;
8398 _tmp93_ = bala_property_get_property_type (_tmp92_);
8399 _tmp94_ = _tmp93_;
8400 _tmp89_ = bala_data_type_is_real_non_null_struct_type (_tmp94_);
8401 } else {
8402 _tmp89_ = FALSE(0);
8403 }
8404 if (_tmp89_) {
8405 BalaDataType* _tmp95_;
8406 BalaDataType* _tmp96_;
8407 gchar* _tmp97_;
8408 gchar* _tmp98_;
8409 gchar* _tmp99_;
8410 gchar* _tmp100_;
8411 BalaCCodeParameter* _tmp101_;
8412 _tmp95_ = bala_property_accessor_get_value_type (acc);
8413 _tmp96_ = _tmp95_;
8414 _tmp97_ = bala_get_ccode_name ((BalaCodeNode*) _tmp96_);
8415 _tmp98_ = _tmp97_;
8416 _tmp99_ = g_strdup_printf ("%s *", _tmp98_);
8417 _tmp100_ = _tmp99_;
8418 _tmp101_ = bala_ccode_parameter_new ("value", _tmp100_);
8419 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
8420 cvalueparam = _tmp101_;
8421 _g_free0 (_tmp100_)(_tmp100_ = (g_free (_tmp100_), ((void*)0)));
8422 _g_free0 (_tmp98_)(_tmp98_ = (g_free (_tmp98_), ((void*)0)));
8423 } else {
8424 BalaDataType* _tmp102_;
8425 BalaDataType* _tmp103_;
8426 gchar* _tmp104_;
8427 gchar* _tmp105_;
8428 BalaCCodeParameter* _tmp106_;
8429 _tmp102_ = bala_property_accessor_get_value_type (acc);
8430 _tmp103_ = _tmp102_;
8431 _tmp104_ = bala_get_ccode_name ((BalaCodeNode*) _tmp103_);
8432 _tmp105_ = _tmp104_;
8433 _tmp106_ = bala_ccode_parameter_new ("value", _tmp105_);
8434 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
8435 cvalueparam = _tmp106_;
8436 _g_free0 (_tmp105_)(_tmp105_ = (g_free (_tmp105_), ((void*)0)));
8437 }
8438 }
8439 _tmp108_ = prop;
8440 _tmp109_ = bala_property_get_is_abstract (_tmp108_);
8441 _tmp110_ = _tmp109_;
8442 if (_tmp110_) {
8443 _tmp107_ = TRUE(!(0));
8444 } else {
8445 BalaProperty* _tmp111_;
8446 gboolean _tmp112_;
8447 gboolean _tmp113_;
8448 _tmp111_ = prop;
8449 _tmp112_ = bala_property_get_is_virtual (_tmp111_);
8450 _tmp113_ = _tmp112_;
8451 _tmp107_ = _tmp113_;
8452 }
8453 if (_tmp107_) {
8454 BalaCCodeFunction* function = NULL((void*)0);
8455 gboolean _tmp114_ = FALSE(0);
8456 gboolean _tmp115_;
8457 gboolean _tmp116_;
8458 BalaCCodeFunction* _tmp127_;
8459 BalaCCodeParameter* _tmp128_;
8460 gboolean _tmp129_ = FALSE(0);
8461 gboolean _tmp130_ = FALSE(0);
8462 gboolean _tmp131_;
8463 gboolean _tmp132_;
8464 gboolean _tmp137_ = FALSE(0);
8465 BalaDataType* _tmp138_;
8466 BalaDataType* _tmp139_;
8467 gboolean _tmp209_ = FALSE(0);
8468 BalaProperty* _tmp210_;
8469 gboolean _tmp211_;
8470 gboolean _tmp212_;
8471 BalaCCodeFunction* _tmp239_;
8472 BalaProperty* _tmp240_;
8473 BalaMemberBinding _tmp241_;
8474 BalaMemberBinding _tmp242_;
8475 BalaCCodeExpression* vcast = NULL((void*)0);
8476 BalaProperty* _tmp250_;
8477 BalaSymbol* _tmp251_;
8478 BalaSymbol* _tmp252_;
8479 gboolean _tmp283_;
8480 gboolean _tmp284_;
8481 BalaCCodeFile* _tmp406_;
8482 BalaCCodeFunction* _tmp407_;
8483 _tmp115_ = bala_property_accessor_get_readable (acc);
8484 _tmp116_ = _tmp115_;
8485 if (_tmp116_) {
8486 _tmp114_ = !returns_real_struct;
8487 } else {
8488 _tmp114_ = FALSE(0);
8489 }
8490 if (_tmp114_) {
8491 gchar* _tmp117_;
8492 gchar* _tmp118_;
8493 BalaDataType* _tmp119_;
8494 BalaDataType* _tmp120_;
8495 gchar* _tmp121_;
8496 gchar* _tmp122_;
8497 BalaCCodeFunction* _tmp123_;
8498 _tmp117_ = bala_get_ccode_name ((BalaCodeNode*) acc);
8499 _tmp118_ = _tmp117_;
8500 _tmp119_ = bala_ccode_base_module_get_current_return_type (self);
8501 _tmp120_ = _tmp119_;
8502 _tmp121_ = bala_get_ccode_name ((BalaCodeNode*) _tmp120_);
8503 _tmp122_ = _tmp121_;
8504 _tmp123_ = bala_ccode_function_new (_tmp118_, _tmp122_);
8505 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
8506 function = _tmp123_;
8507 _g_free0 (_tmp122_)(_tmp122_ = (g_free (_tmp122_), ((void*)0)));
8508 _g_free0 (_tmp118_)(_tmp118_ = (g_free (_tmp118_), ((void*)0)));
8509 } else {
8510 gchar* _tmp124_;
8511 gchar* _tmp125_;
8512 BalaCCodeFunction* _tmp126_;
8513 _tmp124_ = bala_get_ccode_name ((BalaCodeNode*) acc);
8514 _tmp125_ = _tmp124_;
8515 _tmp126_ = bala_ccode_function_new (_tmp125_, "void");
8516 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
8517 function = _tmp126_;
8518 _g_free0 (_tmp125_)(_tmp125_ = (g_free (_tmp125_), ((void*)0)));
8519 }
8520 _tmp127_ = function;
8521 _tmp128_ = cselfparam;
8522 bala_ccode_function_add_parameter (_tmp127_, _tmp128_);
8523 _tmp131_ = bala_property_accessor_get_writable (acc);
8524 _tmp132_ = _tmp131_;
8525 if (_tmp132_) {
8526 _tmp130_ = TRUE(!(0));
8527 } else {
8528 gboolean _tmp133_;
8529 gboolean _tmp134_;
8530 _tmp133_ = bala_property_accessor_get_construction (acc);
8531 _tmp134_ = _tmp133_;
8532 _tmp130_ = _tmp134_;
8533 }
8534 if (_tmp130_) {
8535 _tmp129_ = TRUE(!(0));
8536 } else {
8537 _tmp129_ = returns_real_struct;
8538 }
8539 if (_tmp129_) {
8540 BalaCCodeFunction* _tmp135_;
8541 BalaCCodeParameter* _tmp136_;
8542 _tmp135_ = function;
8543 _tmp136_ = cvalueparam;
8544 bala_ccode_function_add_parameter (_tmp135_, _tmp136_);
8545 }
8546 _tmp138_ = bala_property_accessor_get_value_type (acc);
8547 _tmp139_ = _tmp138_;
8548 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp139_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp139_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
8549 BalaProperty* _tmp140_;
8550 _tmp140_ = prop;
8551 _tmp137_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp140_);
8552 } else {
8553 _tmp137_ = FALSE(0);
8554 }
8555 if (_tmp137_) {
8556 BalaArrayType* array_type = NULL((void*)0);
8557 BalaDataType* _tmp141_;
8558 BalaDataType* _tmp142_;
8559 BalaArrayType* _tmp143_;
8560 gchar* length_ctype = NULL((void*)0);
8561 BalaProperty* _tmp144_;
8562 gchar* _tmp145_;
8563 _tmp141_ = bala_property_accessor_get_value_type (acc);
8564 _tmp142_ = _tmp141_;
8565 _tmp143_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp142_), ((bala_array_type_get_type ())))))
);
8566 array_type = _tmp143_;
8567 _tmp144_ = prop;
8568 _tmp145_ = bala_get_ccode_array_length_type ((BalaCodeNode*) _tmp144_);
8569 length_ctype = _tmp145_;
8570 {
8571 gint dim = 0;
8572 dim = 1;
8573 {
8574 gboolean _tmp146_ = FALSE(0);
8575 _tmp146_ = TRUE(!(0));
8576 while (TRUE(!(0))) {
8577 BalaArrayType* _tmp148_;
8578 gint _tmp149_;
8579 gint _tmp150_;
8580 const gchar* _tmp151_ = NULL((void*)0);
8581 gboolean _tmp152_;
8582 gboolean _tmp153_;
8583 gchar* _tmp154_ = NULL((void*)0);
8584 gboolean _tmp155_;
8585 gboolean _tmp156_;
8586 BalaCCodeFunction* _tmp161_;
8587 gchar* _tmp162_;
8588 gchar* _tmp163_;
8589 BalaCCodeParameter* _tmp164_;
8590 BalaCCodeParameter* _tmp165_;
8591 if (!_tmp146_) {
8592 gint _tmp147_;
8593 _tmp147_ = dim;
8594 dim = _tmp147_ + 1;
8595 }
8596 _tmp146_ = FALSE(0);
8597 _tmp148_ = array_type;
8598 _tmp149_ = bala_array_type_get_rank (_tmp148_);
8599 _tmp150_ = _tmp149_;
8600 if (!(dim <= _tmp150_)) {
8601 break;
8602 }
8603 _tmp152_ = bala_property_accessor_get_readable (acc);
8604 _tmp153_ = _tmp152_;
8605 if (_tmp153_) {
8606 _tmp151_ = "result";
8607 } else {
8608 _tmp151_ = "value";
8609 }
8610 _tmp155_ = bala_property_accessor_get_readable (acc);
8611 _tmp156_ = _tmp155_;
8612 if (_tmp156_) {
8613 const gchar* _tmp157_;
8614 gchar* _tmp158_;
8615 _tmp157_ = length_ctype;
8616 _tmp158_ = g_strconcat (_tmp157_, "*", NULL((void*)0));
8617 _g_free0 (_tmp154_)(_tmp154_ = (g_free (_tmp154_), ((void*)0)));
8618 _tmp154_ = _tmp158_;
8619 } else {
8620 const gchar* _tmp159_;
8621 gchar* _tmp160_;
8622 _tmp159_ = length_ctype;
8623 _tmp160_ = g_strdup (_tmp159_);
8624 _g_free0 (_tmp154_)(_tmp154_ = (g_free (_tmp154_), ((void*)0)));
8625 _tmp154_ = _tmp160_;
8626 }
8627 _tmp161_ = function;
8628 _tmp162_ = bala_ccode_base_module_get_array_length_cname (self, _tmp151_, dim);
8629 _tmp163_ = _tmp162_;
8630 _tmp164_ = bala_ccode_parameter_new (_tmp163_, _tmp154_);
8631 _tmp165_ = _tmp164_;
8632 bala_ccode_function_add_parameter (_tmp161_, _tmp165_);
8633 _bala_ccode_node_unref0 (_tmp165_)((_tmp165_ == ((void*)0)) ? ((void*)0) : (_tmp165_ = (bala_ccode_node_unref
(_tmp165_), ((void*)0))))
;
8634 _g_free0 (_tmp163_)(_tmp163_ = (g_free (_tmp163_), ((void*)0)));
8635 _g_free0 (_tmp154_)(_tmp154_ = (g_free (_tmp154_), ((void*)0)));
8636 }
8637 }
8638 }
8639 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
8640 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
8641 } else {
8642 gboolean _tmp166_ = FALSE(0);
8643 gboolean _tmp167_ = FALSE(0);
8644 BalaDataType* _tmp168_;
8645 BalaDataType* _tmp169_;
8646 _tmp168_ = bala_property_accessor_get_value_type (acc);
8647 _tmp169_ = _tmp168_;
8648 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp169_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp169_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
8649 BalaProperty* _tmp170_;
8650 _tmp170_ = prop;
8651 _tmp167_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp170_);
8652 } else {
8653 _tmp167_ = FALSE(0);
8654 }
8655 if (_tmp167_) {
8656 BalaDataType* _tmp171_;
8657 BalaDataType* _tmp172_;
8658 BalaDelegate* _tmp173_;
8659 BalaDelegate* _tmp174_;
8660 gboolean _tmp175_;
8661 gboolean _tmp176_;
8662 _tmp171_ = bala_property_accessor_get_value_type (acc);
8663 _tmp172_ = _tmp171_;
8664 _tmp173_ = bala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp172_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp172_), ((bala_delegate_type_get_type ())))))
);
8665 _tmp174_ = _tmp173_;
8666 _tmp175_ = bala_delegate_get_has_target (_tmp174_);
8667 _tmp176_ = _tmp175_;
8668 _tmp166_ = _tmp176_;
8669 } else {
8670 _tmp166_ = FALSE(0);
8671 }
8672 if (_tmp166_) {
8673 const gchar* _tmp177_ = NULL((void*)0);
8674 gboolean _tmp178_;
8675 gboolean _tmp179_;
8676 gchar* _tmp180_ = NULL((void*)0);
8677 gboolean _tmp181_;
8678 gboolean _tmp182_;
8679 BalaCCodeFunction* _tmp189_;
8680 gchar* _tmp190_;
8681 gchar* _tmp191_;
8682 BalaCCodeParameter* _tmp192_;
8683 BalaCCodeParameter* _tmp193_;
8684 gboolean _tmp194_ = FALSE(0);
8685 gboolean _tmp195_;
8686 gboolean _tmp196_;
8687 _tmp178_ = bala_property_accessor_get_readable (acc);
8688 _tmp179_ = _tmp178_;
8689 if (_tmp179_) {
8690 _tmp177_ = "result";
8691 } else {
8692 _tmp177_ = "value";
8693 }
8694 _tmp181_ = bala_property_accessor_get_readable (acc);
8695 _tmp182_ = _tmp181_;
8696 if (_tmp182_) {
8697 BalaDataType* _tmp183_;
8698 gchar* _tmp184_;
8699 gchar* _tmp185_;
8700 gchar* _tmp186_;
8701 _tmp183_ = self->delegate_target_type;
8702 _tmp184_ = bala_get_ccode_name ((BalaCodeNode*) _tmp183_);
8703 _tmp185_ = _tmp184_;
8704 _tmp186_ = g_strconcat (_tmp185_, "*", NULL((void*)0));
8705 _g_free0 (_tmp180_)(_tmp180_ = (g_free (_tmp180_), ((void*)0)));
8706 _tmp180_ = _tmp186_;
8707 _g_free0 (_tmp185_)(_tmp185_ = (g_free (_tmp185_), ((void*)0)));
8708 } else {
8709 BalaDataType* _tmp187_;
8710 gchar* _tmp188_;
8711 _tmp187_ = self->delegate_target_type;
8712 _tmp188_ = bala_get_ccode_name ((BalaCodeNode*) _tmp187_);
8713 _g_free0 (_tmp180_)(_tmp180_ = (g_free (_tmp180_), ((void*)0)));
8714 _tmp180_ = _tmp188_;
8715 }
8716 _tmp189_ = function;
8717 _tmp190_ = bala_ccode_base_module_get_delegate_target_cname (self, _tmp177_);
8718 _tmp191_ = _tmp190_;
8719 _tmp192_ = bala_ccode_parameter_new (_tmp191_, _tmp180_);
8720 _tmp193_ = _tmp192_;
8721 bala_ccode_function_add_parameter (_tmp189_, _tmp193_);
8722 _bala_ccode_node_unref0 (_tmp193_)((_tmp193_ == ((void*)0)) ? ((void*)0) : (_tmp193_ = (bala_ccode_node_unref
(_tmp193_), ((void*)0))))
;
8723 _g_free0 (_tmp191_)(_tmp191_ = (g_free (_tmp191_), ((void*)0)));
8724 _tmp195_ = bala_property_accessor_get_readable (acc);
8725 _tmp196_ = _tmp195_;
8726 if (!_tmp196_) {
8727 BalaDataType* _tmp197_;
8728 BalaDataType* _tmp198_;
8729 gboolean _tmp199_;
8730 gboolean _tmp200_;
8731 _tmp197_ = bala_property_accessor_get_value_type (acc);
8732 _tmp198_ = _tmp197_;
8733 _tmp199_ = bala_data_type_get_value_owned (_tmp198_);
8734 _tmp200_ = _tmp199_;
8735 _tmp194_ = _tmp200_;
8736 } else {
8737 _tmp194_ = FALSE(0);
8738 }
8739 if (_tmp194_) {
8740 BalaCCodeFunction* _tmp201_;
8741 gchar* _tmp202_;
8742 gchar* _tmp203_;
8743 BalaDelegateType* _tmp204_;
8744 gchar* _tmp205_;
8745 gchar* _tmp206_;
8746 BalaCCodeParameter* _tmp207_;
8747 BalaCCodeParameter* _tmp208_;
8748 _tmp201_ = function;
8749 _tmp202_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
8750 _tmp203_ = _tmp202_;
8751 _tmp204_ = self->delegate_target_destroy_type;
8752 _tmp205_ = bala_get_ccode_name ((BalaCodeNode*) _tmp204_);
8753 _tmp206_ = _tmp205_;
8754 _tmp207_ = bala_ccode_parameter_new (_tmp203_, _tmp206_);
8755 _tmp208_ = _tmp207_;
8756 bala_ccode_function_add_parameter (_tmp201_, _tmp208_);
8757 _bala_ccode_node_unref0 (_tmp208_)((_tmp208_ == ((void*)0)) ? ((void*)0) : (_tmp208_ = (bala_ccode_node_unref
(_tmp208_), ((void*)0))))
;
8758 _g_free0 (_tmp206_)(_tmp206_ = (g_free (_tmp206_), ((void*)0)));
8759 _g_free0 (_tmp203_)(_tmp203_ = (g_free (_tmp203_), ((void*)0)));
8760 }
8761 _g_free0 (_tmp180_)(_tmp180_ = (g_free (_tmp180_), ((void*)0)));
8762 }
8763 }
8764 _tmp210_ = prop;
8765 _tmp211_ = bala_property_get_is_abstract (_tmp210_);
8766 _tmp212_ = _tmp211_;
8767 if (!_tmp212_) {
8768 gboolean _tmp213_ = FALSE(0);
8769 gboolean _tmp214_ = FALSE(0);
8770 BalaProperty* _tmp215_;
8771 _tmp215_ = prop;
8772 if (bala_symbol_is_private_symbol ((BalaSymbol*) _tmp215_)) {
8773 _tmp214_ = TRUE(!(0));
8774 } else {
8775 gboolean _tmp216_ = FALSE(0);
8776 gboolean _tmp217_;
8777 gboolean _tmp218_;
8778 _tmp217_ = bala_property_accessor_get_readable (acc);
8779 _tmp218_ = _tmp217_;
8780 if (_tmp218_) {
8781 _tmp216_ = TRUE(!(0));
8782 } else {
8783 gboolean _tmp219_;
8784 gboolean _tmp220_;
8785 _tmp219_ = bala_property_accessor_get_writable (acc);
8786 _tmp220_ = _tmp219_;
8787 _tmp216_ = _tmp220_;
8788 }
8789 _tmp214_ = !_tmp216_;
8790 }
8791 if (_tmp214_) {
8792 _tmp213_ = TRUE(!(0));
8793 } else {
8794 BalaSymbolAccessibility _tmp221_;
8795 BalaSymbolAccessibility _tmp222_;
8796 _tmp221_ = bala_symbol_get_access ((BalaSymbol*) acc);
8797 _tmp222_ = _tmp221_;
8798 _tmp213_ = _tmp222_ == BALA_SYMBOL_ACCESSIBILITY_PRIVATE;
8799 }
8800 _tmp209_ = _tmp213_;
8801 } else {
8802 _tmp209_ = FALSE(0);
8803 }
8804 if (_tmp209_) {
8805 BalaCCodeFunction* _tmp223_;
8806 BalaCCodeFunction* _tmp224_;
8807 BalaCCodeModifiers _tmp225_;
8808 BalaCCodeModifiers _tmp226_;
8809 _tmp223_ = function;
8810 _tmp224_ = function;
8811 _tmp225_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp224_);
8812 _tmp226_ = _tmp225_;
8813 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp224_, _tmp226_ | BALA_CCODE_MODIFIERS_STATIC);
8814 } else {
8815 gboolean _tmp227_ = FALSE(0);
8816 BalaCodeContext* _tmp228_;
8817 gboolean _tmp229_;
8818 gboolean _tmp230_;
8819 _tmp228_ = self->priv->_context;
8820 _tmp229_ = bala_code_context_get_hide_internal (_tmp228_);
8821 _tmp230_ = _tmp229_;
8822 if (_tmp230_) {
8823 gboolean _tmp231_ = FALSE(0);
8824 BalaProperty* _tmp232_;
8825 _tmp232_ = prop;
8826 if (bala_symbol_is_internal_symbol ((BalaSymbol*) _tmp232_)) {
8827 _tmp231_ = TRUE(!(0));
8828 } else {
8829 BalaSymbolAccessibility _tmp233_;
8830 BalaSymbolAccessibility _tmp234_;
8831 _tmp233_ = bala_symbol_get_access ((BalaSymbol*) acc);
8832 _tmp234_ = _tmp233_;
8833 _tmp231_ = _tmp234_ == BALA_SYMBOL_ACCESSIBILITY_INTERNAL;
8834 }
8835 _tmp227_ = _tmp231_;
8836 } else {
8837 _tmp227_ = FALSE(0);
8838 }
8839 if (_tmp227_) {
8840 BalaCCodeFunction* _tmp235_;
8841 BalaCCodeFunction* _tmp236_;
8842 BalaCCodeModifiers _tmp237_;
8843 BalaCCodeModifiers _tmp238_;
8844 _tmp235_ = function;
8845 _tmp236_ = function;
8846 _tmp237_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp236_);
8847 _tmp238_ = _tmp237_;
8848 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp236_, _tmp238_ | BALA_CCODE_MODIFIERS_INTERNAL);
8849 }
8850 }
8851 _tmp239_ = function;
8852 bala_ccode_base_module_push_function (self, _tmp239_);
8853 _tmp240_ = prop;
8854 _tmp241_ = bala_property_get_binding (_tmp240_);
8855 _tmp242_ = _tmp241_;
8856 if (_tmp242_ == BALA_MEMBER_BINDING_INSTANCE) {
8857 gboolean _tmp243_ = FALSE(0);
8858 gboolean _tmp244_;
8859 gboolean _tmp245_;
8860 _tmp244_ = bala_property_accessor_get_readable (acc);
8861 _tmp245_ = _tmp244_;
8862 if (!_tmp245_) {
8863 _tmp243_ = TRUE(!(0));
8864 } else {
8865 _tmp243_ = returns_real_struct;
8866 }
8867 if (_tmp243_) {
8868 BalaProperty* _tmp246_;
8869 BalaTypeSymbol* _tmp247_;
8870 _tmp246_ = prop;
8871 _tmp247_ = t;
8872 bala_ccode_base_module_create_property_type_check_statement (self, _tmp246_, FALSE(0), _tmp247_, TRUE(!(0)), "self");
8873 } else {
8874 BalaProperty* _tmp248_;
8875 BalaTypeSymbol* _tmp249_;
8876 _tmp248_ = prop;
8877 _tmp249_ = t;
8878 bala_ccode_base_module_create_property_type_check_statement (self, _tmp248_, TRUE(!(0)), _tmp249_, TRUE(!(0)), "self");
8879 }
8880 }
8881 _tmp250_ = prop;
8882 _tmp251_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp250_);
8883 _tmp252_ = _tmp251_;
8884 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp252_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp252_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
8885 BalaInterface* iface = NULL((void*)0);
8886 BalaProperty* _tmp253_;
8887 BalaSymbol* _tmp254_;
8888 BalaSymbol* _tmp255_;
8889 BalaInterface* _tmp256_;
8890 BalaInterface* _tmp257_;
8891 gchar* _tmp258_;
8892 gchar* _tmp259_;
8893 BalaCCodeIdentifier* _tmp260_;
8894 BalaCCodeIdentifier* _tmp261_;
8895 BalaCCodeFunctionCall* _tmp262_;
8896 BalaCCodeExpression* _tmp263_;
8897 BalaCCodeIdentifier* _tmp264_;
8898 BalaCCodeIdentifier* _tmp265_;
8899 _tmp253_ = prop;
8900 _tmp254_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp253_);
8901 _tmp255_ = _tmp254_;
8902 _tmp256_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp255_, BALA_TYPE_INTERFACE, BalaInterface)(((BalaInterface*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp255_), ((bala_interface_get_type ())))))
);
8903 iface = _tmp256_;
8904 _tmp257_ = iface;
8905 _tmp258_ = bala_get_ccode_type_get_function ((BalaObjectTypeSymbol*) _tmp257_);
8906 _tmp259_ = _tmp258_;
8907 _tmp260_ = bala_ccode_identifier_new (_tmp259_);
8908 _tmp261_ = _tmp260_;
8909 _tmp262_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp261_);
8910 _bala_ccode_node_unref0 (vcast)((vcast == ((void*)0)) ? ((void*)0) : (vcast = (bala_ccode_node_unref
(vcast), ((void*)0))))
;
8911 vcast = (BalaCCodeExpression*) _tmp262_;
8912 _bala_ccode_node_unref0 (_tmp261_)((_tmp261_ == ((void*)0)) ? ((void*)0) : (_tmp261_ = (bala_ccode_node_unref
(_tmp261_), ((void*)0))))
;
8913 _g_free0 (_tmp259_)(_tmp259_ = (g_free (_tmp259_), ((void*)0)));
8914 _tmp263_ = vcast;
8915 _tmp264_ = bala_ccode_identifier_new ("self");
8916 _tmp265_ = _tmp264_;
8917 bala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp263_, BALA_TYPE_CCODE_FUNCTION_CALL, BalaCCodeFunctionCall)(((BalaCCodeFunctionCall*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp263_), ((bala_ccode_function_call_get_type ())))))
, (BalaCCodeExpression*) _tmp265_);
8918 _bala_ccode_node_unref0 (_tmp265_)((_tmp265_ == ((void*)0)) ? ((void*)0) : (_tmp265_ = (bala_ccode_node_unref
(_tmp265_), ((void*)0))))
;
8919 _bala_code_node_unref0 (iface)((iface == ((void*)0)) ? ((void*)0) : (iface = (bala_code_node_unref
(iface), ((void*)0))))
;
8920 } else {
8921 BalaClass* cl = NULL((void*)0);
8922 BalaProperty* _tmp266_;
8923 BalaSymbol* _tmp267_;
8924 BalaSymbol* _tmp268_;
8925 BalaClass* _tmp269_;
8926 BalaClass* _tmp270_;
8927 gboolean _tmp271_;
8928 gboolean _tmp272_;
8929 _tmp266_ = prop;
8930 _tmp267_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp266_);
8931 _tmp268_ = _tmp267_;
8932 _tmp269_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp268_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp268_), ((bala_class_get_type ())))))
);
8933 cl = _tmp269_;
8934 _tmp270_ = cl;
8935 _tmp271_ = bala_class_get_is_compact (_tmp270_);
8936 _tmp272_ = _tmp271_;
8937 if (!_tmp272_) {
8938 BalaClass* _tmp273_;
8939 gchar* _tmp274_;
8940 gchar* _tmp275_;
8941 BalaCCodeIdentifier* _tmp276_;
8942 BalaCCodeIdentifier* _tmp277_;
8943 BalaCCodeFunctionCall* _tmp278_;
8944 BalaCCodeExpression* _tmp279_;
8945 BalaCCodeIdentifier* _tmp280_;
8946 BalaCCodeIdentifier* _tmp281_;
8947 _tmp273_ = cl;
8948 _tmp274_ = bala_get_ccode_type_get_function ((BalaObjectTypeSymbol*) _tmp273_);
8949 _tmp275_ = _tmp274_;
8950 _tmp276_ = bala_ccode_identifier_new (_tmp275_);
8951 _tmp277_ = _tmp276_;
8952 _tmp278_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp277_);
8953 _bala_ccode_node_unref0 (vcast)((vcast == ((void*)0)) ? ((void*)0) : (vcast = (bala_ccode_node_unref
(vcast), ((void*)0))))
;
8954 vcast = (BalaCCodeExpression*) _tmp278_;
8955 _bala_ccode_node_unref0 (_tmp277_)((_tmp277_ == ((void*)0)) ? ((void*)0) : (_tmp277_ = (bala_ccode_node_unref
(_tmp277_), ((void*)0))))
;
8956 _g_free0 (_tmp275_)(_tmp275_ = (g_free (_tmp275_), ((void*)0)));
8957 _tmp279_ = vcast;
8958 _tmp280_ = bala_ccode_identifier_new ("self");
8959 _tmp281_ = _tmp280_;
8960 bala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp279_, BALA_TYPE_CCODE_FUNCTION_CALL, BalaCCodeFunctionCall)(((BalaCCodeFunctionCall*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp279_), ((bala_ccode_function_call_get_type ())))))
, (BalaCCodeExpression*) _tmp281_);
8961 _bala_ccode_node_unref0 (_tmp281_)((_tmp281_ == ((void*)0)) ? ((void*)0) : (_tmp281_ = (bala_ccode_node_unref
(_tmp281_), ((void*)0))))
;
8962 } else {
8963 BalaCCodeIdentifier* _tmp282_;
8964 _tmp282_ = bala_ccode_identifier_new ("self");
8965 _bala_ccode_node_unref0 (vcast)((vcast == ((void*)0)) ? ((void*)0) : (vcast = (bala_ccode_node_unref
(vcast), ((void*)0))))
;
8966 vcast = (BalaCCodeExpression*) _tmp282_;
8967 }
8968 _bala_code_node_unref0 (cl)((cl == ((void*)0)) ? ((void*)0) : (cl = (bala_code_node_unref
(cl), ((void*)0))))
;
8969 }
8970 _tmp283_ = bala_property_accessor_get_readable (acc);
8971 _tmp284_ = _tmp283_;
8972 if (_tmp284_) {
8973 BalaCCodeFunctionCall* vcall = NULL((void*)0);
8974 BalaCCodeExpression* _tmp285_;
8975 BalaProperty* _tmp286_;
8976 const gchar* _tmp287_;
8977 const gchar* _tmp288_;
8978 gchar* _tmp289_;
8979 gchar* _tmp290_;
8980 BalaCCodeMemberAccess* _tmp291_;
8981 BalaCCodeMemberAccess* _tmp292_;
8982 BalaCCodeFunctionCall* _tmp293_;
8983 BalaCCodeFunctionCall* _tmp294_;
8984 BalaCCodeFunctionCall* _tmp295_;
8985 BalaCCodeIdentifier* _tmp296_;
8986 BalaCCodeIdentifier* _tmp297_;
8987 _tmp285_ = vcast;
8988 _tmp286_ = prop;
8989 _tmp287_ = bala_symbol_get_name ((BalaSymbol*) _tmp286_);
8990 _tmp288_ = _tmp287_;
8991 _tmp289_ = g_strdup_printf ("get_%s", _tmp288_);
8992 _tmp290_ = _tmp289_;
8993 _tmp291_ = bala_ccode_member_access_new_pointer (_tmp285_, _tmp290_);
8994 _tmp292_ = _tmp291_;
8995 _tmp293_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp292_);
8996 _tmp294_ = _tmp293_;
8997 _bala_ccode_node_unref0 (_tmp292_)((_tmp292_ == ((void*)0)) ? ((void*)0) : (_tmp292_ = (bala_ccode_node_unref
(_tmp292_), ((void*)0))))
;
8998 _g_free0 (_tmp290_)(_tmp290_ = (g_free (_tmp290_), ((void*)0)));
8999 vcall = _tmp294_;
9000 _tmp295_ = vcall;
9001 _tmp296_ = bala_ccode_identifier_new ("self");
9002 _tmp297_ = _tmp296_;
9003 bala_ccode_function_call_add_argument (_tmp295_, (BalaCCodeExpression*) _tmp297_);
9004 _bala_ccode_node_unref0 (_tmp297_)((_tmp297_ == ((void*)0)) ? ((void*)0) : (_tmp297_ = (bala_ccode_node_unref
(_tmp297_), ((void*)0))))
;
9005 if (returns_real_struct) {
9006 BalaCCodeFunctionCall* _tmp298_;
9007 BalaCCodeIdentifier* _tmp299_;
9008 BalaCCodeIdentifier* _tmp300_;
9009 BalaCCodeFunction* _tmp301_;
9010 BalaCCodeFunction* _tmp302_;
9011 BalaCCodeFunctionCall* _tmp303_;
9012 _tmp298_ = vcall;
9013 _tmp299_ = bala_ccode_identifier_new ("result");
9014 _tmp300_ = _tmp299_;
9015 bala_ccode_function_call_add_argument (_tmp298_, (BalaCCodeExpression*) _tmp300_);
9016 _bala_ccode_node_unref0 (_tmp300_)((_tmp300_ == ((void*)0)) ? ((void*)0) : (_tmp300_ = (bala_ccode_node_unref
(_tmp300_), ((void*)0))))
;
9017 _tmp301_ = bala_ccode_base_module_get_ccode (self);
9018 _tmp302_ = _tmp301_;
9019 _tmp303_ = vcall;
9020 bala_ccode_function_add_expression (_tmp302_, (BalaCCodeExpression*) _tmp303_);
9021 } else {
9022 gboolean _tmp304_ = FALSE(0);
9023 BalaDataType* _tmp305_;
9024 BalaDataType* _tmp306_;
9025 BalaCCodeFunction* _tmp338_;
9026 BalaCCodeFunction* _tmp339_;
9027 BalaCCodeFunctionCall* _tmp340_;
9028 _tmp305_ = bala_property_accessor_get_value_type (acc);
9029 _tmp306_ = _tmp305_;
9030 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp306_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp306_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
9031 BalaProperty* _tmp307_;
9032 _tmp307_ = prop;
9033 _tmp304_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp307_);
9034 } else {
9035 _tmp304_ = FALSE(0);
9036 }
9037 if (_tmp304_) {
9038 BalaArrayType* array_type = NULL((void*)0);
9039 BalaDataType* _tmp308_;
9040 BalaDataType* _tmp309_;
9041 BalaArrayType* _tmp310_;
9042 _tmp308_ = bala_property_accessor_get_value_type (acc);
9043 _tmp309_ = _tmp308_;
9044 _tmp310_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp309_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp309_), ((bala_array_type_get_type ())))))
);
9045 array_type = _tmp310_;
9046 {
9047 gint dim = 0;
9048 dim = 1;
9049 {
9050 gboolean _tmp311_ = FALSE(0);
9051 _tmp311_ = TRUE(!(0));
9052 while (TRUE(!(0))) {
9053 BalaArrayType* _tmp313_;
9054 gint _tmp314_;
9055 gint _tmp315_;
9056 BalaCCodeIdentifier* len_expr = NULL((void*)0);
9057 gchar* _tmp316_;
9058 gchar* _tmp317_;
9059 BalaCCodeIdentifier* _tmp318_;
9060 BalaCCodeIdentifier* _tmp319_;
9061 BalaCCodeFunctionCall* _tmp320_;
9062 BalaCCodeIdentifier* _tmp321_;
9063 if (!_tmp311_) {
9064 gint _tmp312_;
9065 _tmp312_ = dim;
9066 dim = _tmp312_ + 1;
9067 }
9068 _tmp311_ = FALSE(0);
9069 _tmp313_ = array_type;
9070 _tmp314_ = bala_array_type_get_rank (_tmp313_);
9071 _tmp315_ = _tmp314_;
9072 if (!(dim <= _tmp315_)) {
9073 break;
9074 }
9075 _tmp316_ = bala_ccode_base_module_get_array_length_cname (self, "result", dim);
9076 _tmp317_ = _tmp316_;
9077 _tmp318_ = bala_ccode_identifier_new (_tmp317_);
9078 _tmp319_ = _tmp318_;
9079 _g_free0 (_tmp317_)(_tmp317_ = (g_free (_tmp317_), ((void*)0)));
9080 len_expr = _tmp319_;
9081 _tmp320_ = vcall;
9082 _tmp321_ = len_expr;
9083 bala_ccode_function_call_add_argument (_tmp320_, (BalaCCodeExpression*) _tmp321_);
9084 _bala_ccode_node_unref0 (len_expr)((len_expr == ((void*)0)) ? ((void*)0) : (len_expr = (bala_ccode_node_unref
(len_expr), ((void*)0))))
;
9085 }
9086 }
9087 }
9088 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
9089 } else {
9090 gboolean _tmp322_ = FALSE(0);
9091 gboolean _tmp323_ = FALSE(0);
9092 BalaDataType* _tmp324_;
9093 BalaDataType* _tmp325_;
9094 _tmp324_ = bala_property_accessor_get_value_type (acc);
9095 _tmp325_ = _tmp324_;
9096 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp325_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp325_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
9097 BalaProperty* _tmp326_;
9098 _tmp326_ = prop;
9099 _tmp323_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp326_);
9100 } else {
9101 _tmp323_ = FALSE(0);
9102 }
9103 if (_tmp323_) {
9104 BalaDataType* _tmp327_;
9105 BalaDataType* _tmp328_;
9106 BalaDelegate* _tmp329_;
9107 BalaDelegate* _tmp330_;
9108 gboolean _tmp331_;
9109 gboolean _tmp332_;
9110 _tmp327_ = bala_property_accessor_get_value_type (acc);
9111 _tmp328_ = _tmp327_;
9112 _tmp329_ = bala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp328_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp328_), ((bala_delegate_type_get_type ())))))
);
9113 _tmp330_ = _tmp329_;
9114 _tmp331_ = bala_delegate_get_has_target (_tmp330_);
9115 _tmp332_ = _tmp331_;
9116 _tmp322_ = _tmp332_;
9117 } else {
9118 _tmp322_ = FALSE(0);
9119 }
9120 if (_tmp322_) {
9121 BalaCCodeFunctionCall* _tmp333_;
9122 gchar* _tmp334_;
9123 gchar* _tmp335_;
9124 BalaCCodeIdentifier* _tmp336_;
9125 BalaCCodeIdentifier* _tmp337_;
9126 _tmp333_ = vcall;
9127 _tmp334_ = bala_ccode_base_module_get_delegate_target_cname (self, "result");
9128 _tmp335_ = _tmp334_;
9129 _tmp336_ = bala_ccode_identifier_new (_tmp335_);
9130 _tmp337_ = _tmp336_;
9131 bala_ccode_function_call_add_argument (_tmp333_, (BalaCCodeExpression*) _tmp337_);
9132 _bala_ccode_node_unref0 (_tmp337_)((_tmp337_ == ((void*)0)) ? ((void*)0) : (_tmp337_ = (bala_ccode_node_unref
(_tmp337_), ((void*)0))))
;
9133 _g_free0 (_tmp335_)(_tmp335_ = (g_free (_tmp335_), ((void*)0)));
9134 }
9135 }
9136 _tmp338_ = bala_ccode_base_module_get_ccode (self);
9137 _tmp339_ = _tmp338_;
9138 _tmp340_ = vcall;
9139 bala_ccode_function_add_return (_tmp339_, (BalaCCodeExpression*) _tmp340_);
9140 }
9141 _bala_ccode_node_unref0 (vcall)((vcall == ((void*)0)) ? ((void*)0) : (vcall = (bala_ccode_node_unref
(vcall), ((void*)0))))
;
9142 } else {
9143 BalaCCodeFunctionCall* vcall = NULL((void*)0);
9144 BalaCCodeExpression* _tmp341_;
9145 BalaProperty* _tmp342_;
9146 const gchar* _tmp343_;
9147 const gchar* _tmp344_;
9148 gchar* _tmp345_;
9149 gchar* _tmp346_;
9150 BalaCCodeMemberAccess* _tmp347_;
9151 BalaCCodeMemberAccess* _tmp348_;
9152 BalaCCodeFunctionCall* _tmp349_;
9153 BalaCCodeFunctionCall* _tmp350_;
9154 BalaCCodeFunctionCall* _tmp351_;
9155 BalaCCodeIdentifier* _tmp352_;
9156 BalaCCodeIdentifier* _tmp353_;
9157 BalaCCodeFunctionCall* _tmp354_;
9158 BalaCCodeIdentifier* _tmp355_;
9159 BalaCCodeIdentifier* _tmp356_;
9160 gboolean _tmp357_ = FALSE(0);
9161 BalaDataType* _tmp358_;
9162 BalaDataType* _tmp359_;
9163 BalaCCodeFunction* _tmp403_;
9164 BalaCCodeFunction* _tmp404_;
9165 BalaCCodeFunctionCall* _tmp405_;
9166 _tmp341_ = vcast;
9167 _tmp342_ = prop;
9168 _tmp343_ = bala_symbol_get_name ((BalaSymbol*) _tmp342_);
9169 _tmp344_ = _tmp343_;
9170 _tmp345_ = g_strdup_printf ("set_%s", _tmp344_);
9171 _tmp346_ = _tmp345_;
9172 _tmp347_ = bala_ccode_member_access_new_pointer (_tmp341_, _tmp346_);
9173 _tmp348_ = _tmp347_;
9174 _tmp349_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp348_);
9175 _tmp350_ = _tmp349_;
9176 _bala_ccode_node_unref0 (_tmp348_)((_tmp348_ == ((void*)0)) ? ((void*)0) : (_tmp348_ = (bala_ccode_node_unref
(_tmp348_), ((void*)0))))
;
9177 _g_free0 (_tmp346_)(_tmp346_ = (g_free (_tmp346_), ((void*)0)));
9178 vcall = _tmp350_;
9179 _tmp351_ = vcall;
9180 _tmp352_ = bala_ccode_identifier_new ("self");
9181 _tmp353_ = _tmp352_;
9182 bala_ccode_function_call_add_argument (_tmp351_, (BalaCCodeExpression*) _tmp353_);
9183 _bala_ccode_node_unref0 (_tmp353_)((_tmp353_ == ((void*)0)) ? ((void*)0) : (_tmp353_ = (bala_ccode_node_unref
(_tmp353_), ((void*)0))))
;
9184 _tmp354_ = vcall;
9185 _tmp355_ = bala_ccode_identifier_new ("value");
9186 _tmp356_ = _tmp355_;
9187 bala_ccode_function_call_add_argument (_tmp354_, (BalaCCodeExpression*) _tmp356_);
9188 _bala_ccode_node_unref0 (_tmp356_)((_tmp356_ == ((void*)0)) ? ((void*)0) : (_tmp356_ = (bala_ccode_node_unref
(_tmp356_), ((void*)0))))
;
9189 _tmp358_ = bala_property_accessor_get_value_type (acc);
9190 _tmp359_ = _tmp358_;
9191 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp359_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp359_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
9192 BalaProperty* _tmp360_;
9193 _tmp360_ = prop;
9194 _tmp357_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp360_);
9195 } else {
9196 _tmp357_ = FALSE(0);
9197 }
9198 if (_tmp357_) {
9199 BalaArrayType* array_type = NULL((void*)0);
9200 BalaDataType* _tmp361_;
9201 BalaDataType* _tmp362_;
9202 BalaArrayType* _tmp363_;
9203 _tmp361_ = bala_property_accessor_get_value_type (acc);
9204 _tmp362_ = _tmp361_;
9205 _tmp363_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp362_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp362_), ((bala_array_type_get_type ())))))
);
9206 array_type = _tmp363_;
9207 {
9208 gint dim = 0;
9209 dim = 1;
9210 {
9211 gboolean _tmp364_ = FALSE(0);
9212 _tmp364_ = TRUE(!(0));
9213 while (TRUE(!(0))) {
9214 BalaArrayType* _tmp366_;
9215 gint _tmp367_;
9216 gint _tmp368_;
9217 BalaCCodeIdentifier* len_expr = NULL((void*)0);
9218 gchar* _tmp369_;
9219 gchar* _tmp370_;
9220 BalaCCodeIdentifier* _tmp371_;
9221 BalaCCodeIdentifier* _tmp372_;
9222 BalaCCodeFunctionCall* _tmp373_;
9223 BalaCCodeIdentifier* _tmp374_;
9224 if (!_tmp364_) {
9225 gint _tmp365_;
9226 _tmp365_ = dim;
9227 dim = _tmp365_ + 1;
9228 }
9229 _tmp364_ = FALSE(0);
9230 _tmp366_ = array_type;
9231 _tmp367_ = bala_array_type_get_rank (_tmp366_);
9232 _tmp368_ = _tmp367_;
9233 if (!(dim <= _tmp368_)) {
9234 break;
9235 }
9236 _tmp369_ = bala_ccode_base_module_get_array_length_cname (self, "value", dim);
9237 _tmp370_ = _tmp369_;
9238 _tmp371_ = bala_ccode_identifier_new (_tmp370_);
9239 _tmp372_ = _tmp371_;
9240 _g_free0 (_tmp370_)(_tmp370_ = (g_free (_tmp370_), ((void*)0)));
9241 len_expr = _tmp372_;
9242 _tmp373_ = vcall;
9243 _tmp374_ = len_expr;
9244 bala_ccode_function_call_add_argument (_tmp373_, (BalaCCodeExpression*) _tmp374_);
9245 _bala_ccode_node_unref0 (len_expr)((len_expr == ((void*)0)) ? ((void*)0) : (len_expr = (bala_ccode_node_unref
(len_expr), ((void*)0))))
;
9246 }
9247 }
9248 }
9249 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
9250 } else {
9251 gboolean _tmp375_ = FALSE(0);
9252 gboolean _tmp376_ = FALSE(0);
9253 BalaDataType* _tmp377_;
9254 BalaDataType* _tmp378_;
9255 _tmp377_ = bala_property_accessor_get_value_type (acc);
9256 _tmp378_ = _tmp377_;
9257 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp378_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp378_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
9258 BalaProperty* _tmp379_;
9259 _tmp379_ = prop;
9260 _tmp376_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp379_);
9261 } else {
9262 _tmp376_ = FALSE(0);
9263 }
9264 if (_tmp376_) {
9265 BalaDataType* _tmp380_;
9266 BalaDataType* _tmp381_;
9267 BalaDelegate* _tmp382_;
9268 BalaDelegate* _tmp383_;
9269 gboolean _tmp384_;
9270 gboolean _tmp385_;
9271 _tmp380_ = bala_property_accessor_get_value_type (acc);
9272 _tmp381_ = _tmp380_;
9273 _tmp382_ = bala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp381_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp381_), ((bala_delegate_type_get_type ())))))
);
9274 _tmp383_ = _tmp382_;
9275 _tmp384_ = bala_delegate_get_has_target (_tmp383_);
9276 _tmp385_ = _tmp384_;
9277 _tmp375_ = _tmp385_;
9278 } else {
9279 _tmp375_ = FALSE(0);
9280 }
9281 if (_tmp375_) {
9282 BalaCCodeFunctionCall* _tmp386_;
9283 gchar* _tmp387_;
9284 gchar* _tmp388_;
9285 BalaCCodeIdentifier* _tmp389_;
9286 BalaCCodeIdentifier* _tmp390_;
9287 gboolean _tmp391_ = FALSE(0);
9288 gboolean _tmp392_;
9289 gboolean _tmp393_;
9290 _tmp386_ = vcall;
9291 _tmp387_ = bala_ccode_base_module_get_delegate_target_cname (self, "value");
9292 _tmp388_ = _tmp387_;
9293 _tmp389_ = bala_ccode_identifier_new (_tmp388_);
9294 _tmp390_ = _tmp389_;
9295 bala_ccode_function_call_add_argument (_tmp386_, (BalaCCodeExpression*) _tmp390_);
9296 _bala_ccode_node_unref0 (_tmp390_)((_tmp390_ == ((void*)0)) ? ((void*)0) : (_tmp390_ = (bala_ccode_node_unref
(_tmp390_), ((void*)0))))
;
9297 _g_free0 (_tmp388_)(_tmp388_ = (g_free (_tmp388_), ((void*)0)));
9298 _tmp392_ = bala_property_accessor_get_readable (acc);
9299 _tmp393_ = _tmp392_;
9300 if (!_tmp393_) {
9301 BalaDataType* _tmp394_;
9302 BalaDataType* _tmp395_;
9303 gboolean _tmp396_;
9304 gboolean _tmp397_;
9305 _tmp394_ = bala_property_accessor_get_value_type (acc);
9306 _tmp395_ = _tmp394_;
9307 _tmp396_ = bala_data_type_get_value_owned (_tmp395_);
9308 _tmp397_ = _tmp396_;
9309 _tmp391_ = _tmp397_;
9310 } else {
9311 _tmp391_ = FALSE(0);
9312 }
9313 if (_tmp391_) {
9314 BalaCCodeFunctionCall* _tmp398_;
9315 gchar* _tmp399_;
9316 gchar* _tmp400_;
9317 BalaCCodeIdentifier* _tmp401_;
9318 BalaCCodeIdentifier* _tmp402_;
9319 _tmp398_ = vcall;
9320 _tmp399_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
9321 _tmp400_ = _tmp399_;
9322 _tmp401_ = bala_ccode_identifier_new (_tmp400_);
9323 _tmp402_ = _tmp401_;
9324 bala_ccode_function_call_add_argument (_tmp398_, (BalaCCodeExpression*) _tmp402_);
9325 _bala_ccode_node_unref0 (_tmp402_)((_tmp402_ == ((void*)0)) ? ((void*)0) : (_tmp402_ = (bala_ccode_node_unref
(_tmp402_), ((void*)0))))
;
9326 _g_free0 (_tmp400_)(_tmp400_ = (g_free (_tmp400_), ((void*)0)));
9327 }
9328 }
9329 }
9330 _tmp403_ = bala_ccode_base_module_get_ccode (self);
9331 _tmp404_ = _tmp403_;
9332 _tmp405_ = vcall;
9333 bala_ccode_function_add_expression (_tmp404_, (BalaCCodeExpression*) _tmp405_);
9334 _bala_ccode_node_unref0 (vcall)((vcall == ((void*)0)) ? ((void*)0) : (vcall = (bala_ccode_node_unref
(vcall), ((void*)0))))
;
9335 }
9336 bala_ccode_base_module_pop_function (self);
9337 _tmp406_ = self->cfile;
9338 _tmp407_ = function;
9339 bala_ccode_file_add_function (_tmp406_, _tmp407_);
9340 _bala_ccode_node_unref0 (vcast)((vcast == ((void*)0)) ? ((void*)0) : (vcast = (bala_ccode_node_unref
(vcast), ((void*)0))))
;
9341 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
9342 }
9343 _tmp409_ = prop;
9344 _tmp410_ = bala_property_get_is_abstract (_tmp409_);
9345 _tmp411_ = _tmp410_;
9346 if (!_tmp411_) {
9347 BalaBlock* _tmp412_;
9348 BalaBlock* _tmp413_;
9349 _tmp412_ = bala_subroutine_get_body ((BalaSubroutine*) acc);
9350 _tmp413_ = _tmp412_;
9351 _tmp408_ = _tmp413_ != NULL((void*)0);
9352 } else {
9353 _tmp408_ = FALSE(0);
9354 }
9355 if (_tmp408_) {
9356 gboolean _tmp414_ = FALSE(0);
9357 BalaProperty* _tmp415_;
9358 BalaProperty* _tmp416_;
9359 BalaProperty* _tmp417_;
9360 gboolean is_virtual = FALSE(0);
9361 gchar* cname = NULL((void*)0);
9362 gchar* _tmp421_;
9363 BalaCCodeFunction* function = NULL((void*)0);
9364 gboolean _tmp422_ = FALSE(0);
9365 gboolean _tmp423_ = FALSE(0);
9366 gboolean _tmp424_;
9367 gboolean _tmp425_;
9368 BalaObjectType* base_type = NULL((void*)0);
9369 BalaProperty* _tmp436_;
9370 BalaMemberBinding _tmp437_;
9371 BalaMemberBinding _tmp438_;
9372 gboolean _tmp469_ = FALSE(0);
9373 gboolean _tmp470_ = FALSE(0);
9374 gboolean _tmp471_;
9375 gboolean _tmp472_;
9376 gboolean _tmp477_ = FALSE(0);
9377 BalaDataType* _tmp478_;
9378 BalaDataType* _tmp479_;
9379 BalaCCodeFunction* _tmp575_;
9380 gboolean _tmp576_ = FALSE(0);
9381 BalaProperty* _tmp577_;
9382 BalaMemberBinding _tmp578_;
9383 BalaMemberBinding _tmp579_;
9384 gboolean _tmp587_ = FALSE(0);
9385 gboolean _tmp588_;
9386 gboolean _tmp589_;
9387 gboolean _tmp626_ = FALSE(0);
9388 gboolean _tmp627_ = FALSE(0);
9389 BalaCodeContext* _tmp628_;
9390 BalaSemanticAnalyzer* _tmp629_;
9391 BalaSemanticAnalyzer* _tmp630_;
9392 BalaProperty* _tmp631_;
9393 gboolean _tmp866_;
9394 gboolean _tmp867_;
9395 BalaCCodeFile* _tmp878_;
9396 BalaCCodeFunction* _tmp879_;
9397 _tmp415_ = prop;
9398 _tmp416_ = bala_property_get_base_property (_tmp415_);
9399 _tmp417_ = _tmp416_;
9400 if (_tmp417_ != NULL((void*)0)) {
9401 _tmp414_ = TRUE(!(0));
9402 } else {
9403 BalaProperty* _tmp418_;
9404 BalaProperty* _tmp419_;
9405 BalaProperty* _tmp420_;
9406 _tmp418_ = prop;
9407 _tmp419_ = bala_property_get_base_interface_property (_tmp418_);
9408 _tmp420_ = _tmp419_;
9409 _tmp414_ = _tmp420_ != NULL((void*)0);
9410 }
9411 is_virtual = _tmp414_;
9412 _tmp421_ = bala_get_ccode_real_name ((BalaSymbol*) acc);
9413 cname = _tmp421_;
9414 _tmp424_ = bala_property_accessor_get_writable (acc);
9415 _tmp425_ = _tmp424_;
9416 if (_tmp425_) {
9417 _tmp423_ = TRUE(!(0));
9418 } else {
9419 gboolean _tmp426_;
9420 gboolean _tmp427_;
9421 _tmp426_ = bala_property_accessor_get_construction (acc);
9422 _tmp427_ = _tmp426_;
9423 _tmp423_ = _tmp427_;
9424 }
9425 if (_tmp423_) {
9426 _tmp422_ = TRUE(!(0));
9427 } else {
9428 _tmp422_ = returns_real_struct;
9429 }
9430 if (_tmp422_) {
9431 const gchar* _tmp428_;
9432 BalaCCodeFunction* _tmp429_;
9433 _tmp428_ = cname;
9434 _tmp429_ = bala_ccode_function_new (_tmp428_, "void");
9435 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
9436 function = _tmp429_;
9437 } else {
9438 const gchar* _tmp430_;
9439 BalaDataType* _tmp431_;
9440 BalaDataType* _tmp432_;
9441 gchar* _tmp433_;
9442 gchar* _tmp434_;
9443 BalaCCodeFunction* _tmp435_;
9444 _tmp430_ = cname;
9445 _tmp431_ = bala_property_accessor_get_value_type (acc);
9446 _tmp432_ = _tmp431_;
9447 _tmp433_ = bala_get_ccode_name ((BalaCodeNode*) _tmp432_);
9448 _tmp434_ = _tmp433_;
9449 _tmp435_ = bala_ccode_function_new (_tmp430_, _tmp434_);
9450 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
9451 function = _tmp435_;
9452 _g_free0 (_tmp434_)(_tmp434_ = (g_free (_tmp434_), ((void*)0)));
9453 }
9454 base_type = NULL((void*)0);
9455 _tmp436_ = prop;
9456 _tmp437_ = bala_property_get_binding (_tmp436_);
9457 _tmp438_ = _tmp437_;
9458 if (_tmp438_ == BALA_MEMBER_BINDING_INSTANCE) {
9459 if (is_virtual) {
9460 BalaProperty* _tmp439_;
9461 BalaProperty* _tmp440_;
9462 BalaProperty* _tmp441_;
9463 BalaCCodeFunction* _tmp457_;
9464 BalaCCodeFunction* _tmp458_;
9465 BalaCCodeModifiers _tmp459_;
9466 BalaCCodeModifiers _tmp460_;
9467 BalaCCodeFunction* _tmp461_;
9468 BalaObjectType* _tmp462_;
9469 gchar* _tmp463_;
9470 gchar* _tmp464_;
9471 BalaCCodeParameter* _tmp465_;
9472 BalaCCodeParameter* _tmp466_;
9473 _tmp439_ = prop;
9474 _tmp440_ = bala_property_get_base_property (_tmp439_);
9475 _tmp441_ = _tmp440_;
9476 if (_tmp441_ != NULL((void*)0)) {
9477 BalaProperty* _tmp442_;
9478 BalaProperty* _tmp443_;
9479 BalaProperty* _tmp444_;
9480 BalaSymbol* _tmp445_;
9481 BalaSymbol* _tmp446_;
9482 BalaObjectType* _tmp447_;
9483 _tmp442_ = prop;
9484 _tmp443_ = bala_property_get_base_property (_tmp442_);
9485 _tmp444_ = _tmp443_;
9486 _tmp445_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp444_);
9487 _tmp446_ = _tmp445_;
9488 _tmp447_ = bala_object_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp446_, BALA_TYPE_OBJECT_TYPE_SYMBOL, BalaObjectTypeSymbol)(((BalaObjectTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp446_), ((bala_object_type_symbol_get_type ())))))
);
9489 _bala_code_node_unref0 (base_type)((base_type == ((void*)0)) ? ((void*)0) : (base_type = (bala_code_node_unref
(base_type), ((void*)0))))
;
9490 base_type = _tmp447_;
9491 } else {
9492 BalaProperty* _tmp448_;
9493 BalaProperty* _tmp449_;
9494 BalaProperty* _tmp450_;
9495 _tmp448_ = prop;
9496 _tmp449_ = bala_property_get_base_interface_property (_tmp448_);
9497 _tmp450_ = _tmp449_;
9498 if (_tmp450_ != NULL((void*)0)) {
9499 BalaProperty* _tmp451_;
9500 BalaProperty* _tmp452_;
9501 BalaProperty* _tmp453_;
9502 BalaSymbol* _tmp454_;
9503 BalaSymbol* _tmp455_;
9504 BalaObjectType* _tmp456_;
9505 _tmp451_ = prop;
9506 _tmp452_ = bala_property_get_base_interface_property (_tmp451_);
9507 _tmp453_ = _tmp452_;
9508 _tmp454_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp453_);
9509 _tmp455_ = _tmp454_;
9510 _tmp456_ = bala_object_type_new (G_TYPE_CHECK_INSTANCE_CAST (_tmp455_, BALA_TYPE_OBJECT_TYPE_SYMBOL, BalaObjectTypeSymbol)(((BalaObjectTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp455_), ((bala_object_type_symbol_get_type ())))))
);
9511 _bala_code_node_unref0 (base_type)((base_type == ((void*)0)) ? ((void*)0) : (base_type = (bala_code_node_unref
(base_type), ((void*)0))))
;
9512 base_type = _tmp456_;
9513 }
9514 }
9515 _tmp457_ = function;
9516 _tmp458_ = function;
9517 _tmp459_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp458_);
9518 _tmp460_ = _tmp459_;
9519 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp458_, _tmp460_ | BALA_CCODE_MODIFIERS_STATIC);
9520 _tmp461_ = function;
9521 _tmp462_ = base_type;
9522 _tmp463_ = bala_get_ccode_name ((BalaCodeNode*) _tmp462_);
9523 _tmp464_ = _tmp463_;
9524 _tmp465_ = bala_ccode_parameter_new ("base", _tmp464_);
9525 _tmp466_ = _tmp465_;
9526 bala_ccode_function_add_parameter (_tmp461_, _tmp466_);
9527 _bala_ccode_node_unref0 (_tmp466_)((_tmp466_ == ((void*)0)) ? ((void*)0) : (_tmp466_ = (bala_ccode_node_unref
(_tmp466_), ((void*)0))))
;
9528 _g_free0 (_tmp464_)(_tmp464_ = (g_free (_tmp464_), ((void*)0)));
9529 } else {
9530 BalaCCodeFunction* _tmp467_;
9531 BalaCCodeParameter* _tmp468_;
9532 _tmp467_ = function;
9533 _tmp468_ = cselfparam;
9534 bala_ccode_function_add_parameter (_tmp467_, _tmp468_);
9535 }
9536 }
9537 _tmp471_ = bala_property_accessor_get_writable (acc);
9538 _tmp472_ = _tmp471_;
9539 if (_tmp472_) {
9540 _tmp470_ = TRUE(!(0));
9541 } else {
9542 gboolean _tmp473_;
9543 gboolean _tmp474_;
9544 _tmp473_ = bala_property_accessor_get_construction (acc);
9545 _tmp474_ = _tmp473_;
9546 _tmp470_ = _tmp474_;
9547 }
9548 if (_tmp470_) {
9549 _tmp469_ = TRUE(!(0));
9550 } else {
9551 _tmp469_ = returns_real_struct;
9552 }
9553 if (_tmp469_) {
9554 BalaCCodeFunction* _tmp475_;
9555 BalaCCodeParameter* _tmp476_;
9556 _tmp475_ = function;
9557 _tmp476_ = cvalueparam;
9558 bala_ccode_function_add_parameter (_tmp475_, _tmp476_);
9559 }
9560 _tmp478_ = bala_property_accessor_get_value_type (acc);
9561 _tmp479_ = _tmp478_;
9562 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp479_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp479_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
9563 BalaProperty* _tmp480_;
9564 _tmp480_ = prop;
9565 _tmp477_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp480_);
9566 } else {
9567 _tmp477_ = FALSE(0);
9568 }
9569 if (_tmp477_) {
9570 BalaArrayType* array_type = NULL((void*)0);
9571 BalaDataType* _tmp481_;
9572 BalaDataType* _tmp482_;
9573 BalaArrayType* _tmp483_;
9574 gchar* length_ctype = NULL((void*)0);
9575 BalaProperty* _tmp484_;
9576 gchar* _tmp485_;
9577 _tmp481_ = bala_property_accessor_get_value_type (acc);
9578 _tmp482_ = _tmp481_;
9579 _tmp483_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp482_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp482_), ((bala_array_type_get_type ())))))
);
9580 array_type = _tmp483_;
9581 _tmp484_ = prop;
9582 _tmp485_ = bala_get_ccode_array_length_type ((BalaCodeNode*) _tmp484_);
9583 length_ctype = _tmp485_;
9584 {
9585 gint dim = 0;
9586 dim = 1;
9587 {
9588 gboolean _tmp486_ = FALSE(0);
9589 _tmp486_ = TRUE(!(0));
9590 while (TRUE(!(0))) {
9591 BalaArrayType* _tmp488_;
9592 gint _tmp489_;
9593 gint _tmp490_;
9594 const gchar* _tmp491_ = NULL((void*)0);
9595 gboolean _tmp492_;
9596 gboolean _tmp493_;
9597 gchar* _tmp494_ = NULL((void*)0);
9598 gboolean _tmp495_;
9599 gboolean _tmp496_;
9600 BalaCCodeFunction* _tmp501_;
9601 gchar* _tmp502_;
9602 gchar* _tmp503_;
9603 BalaCCodeParameter* _tmp504_;
9604 BalaCCodeParameter* _tmp505_;
9605 if (!_tmp486_) {
9606 gint _tmp487_;
9607 _tmp487_ = dim;
9608 dim = _tmp487_ + 1;
9609 }
9610 _tmp486_ = FALSE(0);
9611 _tmp488_ = array_type;
9612 _tmp489_ = bala_array_type_get_rank (_tmp488_);
9613 _tmp490_ = _tmp489_;
9614 if (!(dim <= _tmp490_)) {
9615 break;
9616 }
9617 _tmp492_ = bala_property_accessor_get_readable (acc);
9618 _tmp493_ = _tmp492_;
9619 if (_tmp493_) {
9620 _tmp491_ = "result";
9621 } else {
9622 _tmp491_ = "value";
9623 }
9624 _tmp495_ = bala_property_accessor_get_readable (acc);
9625 _tmp496_ = _tmp495_;
9626 if (_tmp496_) {
9627 const gchar* _tmp497_;
9628 gchar* _tmp498_;
9629 _tmp497_ = length_ctype;
9630 _tmp498_ = g_strconcat (_tmp497_, "*", NULL((void*)0));
9631 _g_free0 (_tmp494_)(_tmp494_ = (g_free (_tmp494_), ((void*)0)));
9632 _tmp494_ = _tmp498_;
9633 } else {
9634 const gchar* _tmp499_;
9635 gchar* _tmp500_;
9636 _tmp499_ = length_ctype;
9637 _tmp500_ = g_strdup (_tmp499_);
9638 _g_free0 (_tmp494_)(_tmp494_ = (g_free (_tmp494_), ((void*)0)));
9639 _tmp494_ = _tmp500_;
9640 }
9641 _tmp501_ = function;
9642 _tmp502_ = bala_ccode_base_module_get_array_length_cname (self, _tmp491_, dim);
9643 _tmp503_ = _tmp502_;
9644 _tmp504_ = bala_ccode_parameter_new (_tmp503_, _tmp494_);
9645 _tmp505_ = _tmp504_;
9646 bala_ccode_function_add_parameter (_tmp501_, _tmp505_);
9647 _bala_ccode_node_unref0 (_tmp505_)((_tmp505_ == ((void*)0)) ? ((void*)0) : (_tmp505_ = (bala_ccode_node_unref
(_tmp505_), ((void*)0))))
;
9648 _g_free0 (_tmp503_)(_tmp503_ = (g_free (_tmp503_), ((void*)0)));
9649 _g_free0 (_tmp494_)(_tmp494_ = (g_free (_tmp494_), ((void*)0)));
9650 }
9651 }
9652 }
9653 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
9654 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
9655 } else {
9656 gboolean _tmp506_ = FALSE(0);
9657 gboolean _tmp507_ = FALSE(0);
9658 BalaDataType* _tmp508_;
9659 BalaDataType* _tmp509_;
9660 _tmp508_ = bala_property_accessor_get_value_type (acc);
9661 _tmp509_ = _tmp508_;
9662 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp509_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp509_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
9663 BalaProperty* _tmp510_;
9664 _tmp510_ = prop;
9665 _tmp507_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp510_);
9666 } else {
9667 _tmp507_ = FALSE(0);
9668 }
9669 if (_tmp507_) {
9670 BalaDataType* _tmp511_;
9671 BalaDataType* _tmp512_;
9672 BalaDelegate* _tmp513_;
9673 BalaDelegate* _tmp514_;
9674 gboolean _tmp515_;
9675 gboolean _tmp516_;
9676 _tmp511_ = bala_property_accessor_get_value_type (acc);
9677 _tmp512_ = _tmp511_;
9678 _tmp513_ = bala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp512_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp512_), ((bala_delegate_type_get_type ())))))
);
9679 _tmp514_ = _tmp513_;
9680 _tmp515_ = bala_delegate_get_has_target (_tmp514_);
9681 _tmp516_ = _tmp515_;
9682 _tmp506_ = _tmp516_;
9683 } else {
9684 _tmp506_ = FALSE(0);
9685 }
9686 if (_tmp506_) {
9687 const gchar* _tmp517_ = NULL((void*)0);
9688 gboolean _tmp518_;
9689 gboolean _tmp519_;
9690 gchar* _tmp520_ = NULL((void*)0);
9691 gboolean _tmp521_;
9692 gboolean _tmp522_;
9693 BalaCCodeFunction* _tmp529_;
9694 gchar* _tmp530_;
9695 gchar* _tmp531_;
9696 BalaCCodeParameter* _tmp532_;
9697 BalaCCodeParameter* _tmp533_;
9698 gboolean _tmp534_ = FALSE(0);
9699 gboolean _tmp535_;
9700 gboolean _tmp536_;
9701 _tmp518_ = bala_property_accessor_get_readable (acc);
9702 _tmp519_ = _tmp518_;
9703 if (_tmp519_) {
9704 _tmp517_ = "result";
9705 } else {
9706 _tmp517_ = "value";
9707 }
9708 _tmp521_ = bala_property_accessor_get_readable (acc);
9709 _tmp522_ = _tmp521_;
9710 if (_tmp522_) {
9711 BalaDataType* _tmp523_;
9712 gchar* _tmp524_;
9713 gchar* _tmp525_;
9714 gchar* _tmp526_;
9715 _tmp523_ = self->delegate_target_type;
9716 _tmp524_ = bala_get_ccode_name ((BalaCodeNode*) _tmp523_);
9717 _tmp525_ = _tmp524_;
9718 _tmp526_ = g_strconcat (_tmp525_, "*", NULL((void*)0));
9719 _g_free0 (_tmp520_)(_tmp520_ = (g_free (_tmp520_), ((void*)0)));
9720 _tmp520_ = _tmp526_;
9721 _g_free0 (_tmp525_)(_tmp525_ = (g_free (_tmp525_), ((void*)0)));
9722 } else {
9723 BalaDataType* _tmp527_;
9724 gchar* _tmp528_;
9725 _tmp527_ = self->delegate_target_type;
9726 _tmp528_ = bala_get_ccode_name ((BalaCodeNode*) _tmp527_);
9727 _g_free0 (_tmp520_)(_tmp520_ = (g_free (_tmp520_), ((void*)0)));
9728 _tmp520_ = _tmp528_;
9729 }
9730 _tmp529_ = function;
9731 _tmp530_ = bala_ccode_base_module_get_delegate_target_cname (self, _tmp517_);
9732 _tmp531_ = _tmp530_;
9733 _tmp532_ = bala_ccode_parameter_new (_tmp531_, _tmp520_);
9734 _tmp533_ = _tmp532_;
9735 bala_ccode_function_add_parameter (_tmp529_, _tmp533_);
9736 _bala_ccode_node_unref0 (_tmp533_)((_tmp533_ == ((void*)0)) ? ((void*)0) : (_tmp533_ = (bala_ccode_node_unref
(_tmp533_), ((void*)0))))
;
9737 _g_free0 (_tmp531_)(_tmp531_ = (g_free (_tmp531_), ((void*)0)));
9738 _tmp535_ = bala_property_accessor_get_readable (acc);
9739 _tmp536_ = _tmp535_;
9740 if (!_tmp536_) {
9741 BalaDataType* _tmp537_;
9742 BalaDataType* _tmp538_;
9743 gboolean _tmp539_;
9744 gboolean _tmp540_;
9745 _tmp537_ = bala_property_accessor_get_value_type (acc);
9746 _tmp538_ = _tmp537_;
9747 _tmp539_ = bala_data_type_get_value_owned (_tmp538_);
9748 _tmp540_ = _tmp539_;
9749 _tmp534_ = _tmp540_;
9750 } else {
9751 _tmp534_ = FALSE(0);
9752 }
9753 if (_tmp534_) {
9754 BalaCCodeFunction* _tmp541_;
9755 gchar* _tmp542_;
9756 gchar* _tmp543_;
9757 BalaDelegateType* _tmp544_;
9758 gchar* _tmp545_;
9759 gchar* _tmp546_;
9760 BalaCCodeParameter* _tmp547_;
9761 BalaCCodeParameter* _tmp548_;
9762 _tmp541_ = function;
9763 _tmp542_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "value");
9764 _tmp543_ = _tmp542_;
9765 _tmp544_ = self->delegate_target_destroy_type;
9766 _tmp545_ = bala_get_ccode_name ((BalaCodeNode*) _tmp544_);
9767 _tmp546_ = _tmp545_;
9768 _tmp547_ = bala_ccode_parameter_new (_tmp543_, _tmp546_);
9769 _tmp548_ = _tmp547_;
9770 bala_ccode_function_add_parameter (_tmp541_, _tmp548_);
9771 _bala_ccode_node_unref0 (_tmp548_)((_tmp548_ == ((void*)0)) ? ((void*)0) : (_tmp548_ = (bala_ccode_node_unref
(_tmp548_), ((void*)0))))
;
9772 _g_free0 (_tmp546_)(_tmp546_ = (g_free (_tmp546_), ((void*)0)));
9773 _g_free0 (_tmp543_)(_tmp543_ = (g_free (_tmp543_), ((void*)0)));
9774 }
9775 _g_free0 (_tmp520_)(_tmp520_ = (g_free (_tmp520_), ((void*)0)));
9776 }
9777 }
9778 if (!is_virtual) {
9779 gboolean _tmp549_ = FALSE(0);
9780 gboolean _tmp550_ = FALSE(0);
9781 BalaProperty* _tmp551_;
9782 _tmp551_ = prop;
9783 if (bala_symbol_is_private_symbol ((BalaSymbol*) _tmp551_)) {
9784 _tmp550_ = TRUE(!(0));
9785 } else {
9786 gboolean _tmp552_ = FALSE(0);
9787 gboolean _tmp553_;
9788 gboolean _tmp554_;
9789 _tmp553_ = bala_property_accessor_get_readable (acc);
9790 _tmp554_ = _tmp553_;
9791 if (_tmp554_) {
9792 _tmp552_ = TRUE(!(0));
9793 } else {
9794 gboolean _tmp555_;
9795 gboolean _tmp556_;
9796 _tmp555_ = bala_property_accessor_get_writable (acc);
9797 _tmp556_ = _tmp555_;
9798 _tmp552_ = _tmp556_;
9799 }
9800 _tmp550_ = !_tmp552_;
9801 }
9802 if (_tmp550_) {
9803 _tmp549_ = TRUE(!(0));
9804 } else {
9805 BalaSymbolAccessibility _tmp557_;
9806 BalaSymbolAccessibility _tmp558_;
9807 _tmp557_ = bala_symbol_get_access ((BalaSymbol*) acc);
9808 _tmp558_ = _tmp557_;
9809 _tmp549_ = _tmp558_ == BALA_SYMBOL_ACCESSIBILITY_PRIVATE;
9810 }
9811 if (_tmp549_) {
9812 BalaCCodeFunction* _tmp559_;
9813 BalaCCodeFunction* _tmp560_;
9814 BalaCCodeModifiers _tmp561_;
9815 BalaCCodeModifiers _tmp562_;
9816 _tmp559_ = function;
9817 _tmp560_ = function;
9818 _tmp561_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp560_);
9819 _tmp562_ = _tmp561_;
9820 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp560_, _tmp562_ | BALA_CCODE_MODIFIERS_STATIC);
9821 } else {
9822 gboolean _tmp563_ = FALSE(0);
9823 BalaCodeContext* _tmp564_;
9824 gboolean _tmp565_;
9825 gboolean _tmp566_;
9826 _tmp564_ = self->priv->_context;
9827 _tmp565_ = bala_code_context_get_hide_internal (_tmp564_);
9828 _tmp566_ = _tmp565_;
9829 if (_tmp566_) {
9830 gboolean _tmp567_ = FALSE(0);
9831 BalaProperty* _tmp568_;
9832 _tmp568_ = prop;
9833 if (bala_symbol_is_internal_symbol ((BalaSymbol*) _tmp568_)) {
9834 _tmp567_ = TRUE(!(0));
9835 } else {
9836 BalaSymbolAccessibility _tmp569_;
9837 BalaSymbolAccessibility _tmp570_;
9838 _tmp569_ = bala_symbol_get_access ((BalaSymbol*) acc);
9839 _tmp570_ = _tmp569_;
9840 _tmp567_ = _tmp570_ == BALA_SYMBOL_ACCESSIBILITY_INTERNAL;
9841 }
9842 _tmp563_ = _tmp567_;
9843 } else {
9844 _tmp563_ = FALSE(0);
9845 }
9846 if (_tmp563_) {
9847 BalaCCodeFunction* _tmp571_;
9848 BalaCCodeFunction* _tmp572_;
9849 BalaCCodeModifiers _tmp573_;
9850 BalaCCodeModifiers _tmp574_;
9851 _tmp571_ = function;
9852 _tmp572_ = function;
9853 _tmp573_ = bala_ccode_node_get_modifiers ((BalaCCodeNode*) _tmp572_);
9854 _tmp574_ = _tmp573_;
9855 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp572_, _tmp574_ | BALA_CCODE_MODIFIERS_INTERNAL);
9856 }
9857 }
9858 }
9859 _tmp575_ = function;
9860 bala_ccode_base_module_push_function (self, _tmp575_);
9861 _tmp577_ = prop;
9862 _tmp578_ = bala_property_get_binding (_tmp577_);
9863 _tmp579_ = _tmp578_;
9864 if (_tmp579_ == BALA_MEMBER_BINDING_INSTANCE) {
9865 _tmp576_ = !is_virtual;
9866 } else {
9867 _tmp576_ = FALSE(0);
9868 }
9869 if (_tmp576_) {
9870 gboolean _tmp580_ = FALSE(0);
9871 gboolean _tmp581_;
9872 gboolean _tmp582_;
9873 _tmp581_ = bala_property_accessor_get_readable (acc);
9874 _tmp582_ = _tmp581_;
9875 if (!_tmp582_) {
9876 _tmp580_ = TRUE(!(0));
9877 } else {
9878 _tmp580_ = returns_real_struct;
9879 }
9880 if (_tmp580_) {
9881 BalaProperty* _tmp583_;
9882 BalaTypeSymbol* _tmp584_;
9883 _tmp583_ = prop;
9884 _tmp584_ = t;
9885 bala_ccode_base_module_create_property_type_check_statement (self, _tmp583_, FALSE(0), _tmp584_, TRUE(!(0)), "self");
9886 } else {
9887 BalaProperty* _tmp585_;
9888 BalaTypeSymbol* _tmp586_;
9889 _tmp585_ = prop;
9890 _tmp586_ = t;
9891 bala_ccode_base_module_create_property_type_check_statement (self, _tmp585_, TRUE(!(0)), _tmp586_, TRUE(!(0)), "self");
9892 }
9893 }
9894 _tmp588_ = bala_property_accessor_get_readable (acc);
9895 _tmp589_ = _tmp588_;
9896 if (_tmp589_) {
9897 _tmp587_ = !returns_real_struct;
9898 } else {
9899 _tmp587_ = FALSE(0);
9900 }
9901 if (_tmp587_) {
9902 gboolean _tmp590_ = FALSE(0);
9903 BalaBasicBlock* _tmp591_;
9904 BalaBasicBlock* _tmp592_;
9905 _tmp591_ = bala_subroutine_get_return_block ((BalaSubroutine*) acc);
9906 _tmp592_ = _tmp591_;
9907 if (_tmp592_ == NULL((void*)0)) {
9908 _tmp590_ = TRUE(!(0));
9909 } else {
9910 BalaBasicBlock* _tmp593_;
9911 BalaBasicBlock* _tmp594_;
9912 BalaList* _tmp595_;
9913 gint _tmp596_;
9914 gint _tmp597_;
9915 _tmp593_ = bala_subroutine_get_return_block ((BalaSubroutine*) acc);
9916 _tmp594_ = _tmp593_;
9917 _tmp595_ = bala_basic_block_get_predecessors (_tmp594_);
9918 _tmp596_ = bala_collection_get_size ((BalaCollection*) _tmp595_);
9919 _tmp597_ = _tmp596_;
9920 _tmp590_ = _tmp597_ > 0;
9921 }
9922 if (_tmp590_) {
9923 BalaCCodeFunction* _tmp598_;
9924 BalaCCodeFunction* _tmp599_;
9925 BalaDataType* _tmp600_;
9926 BalaDataType* _tmp601_;
9927 gchar* _tmp602_;
9928 gchar* _tmp603_;
9929 BalaCCodeVariableDeclarator* _tmp604_;
9930 BalaCCodeVariableDeclarator* _tmp605_;
9931 _tmp598_ = bala_ccode_base_module_get_ccode (self);
9932 _tmp599_ = _tmp598_;
9933 _tmp600_ = bala_property_accessor_get_value_type (acc);
9934 _tmp601_ = _tmp600_;
9935 _tmp602_ = bala_get_ccode_name ((BalaCodeNode*) _tmp601_);
9936 _tmp603_ = _tmp602_;
9937 _tmp604_ = bala_ccode_variable_declarator_new ("result", NULL((void*)0), NULL((void*)0));
9938 _tmp605_ = _tmp604_;
9939 bala_ccode_function_add_declaration (_tmp599_, _tmp603_, (BalaCCodeDeclarator*) _tmp605_, 0);
9940 _bala_ccode_node_unref0 (_tmp605_)((_tmp605_ == ((void*)0)) ? ((void*)0) : (_tmp605_ = (bala_ccode_node_unref
(_tmp605_), ((void*)0))))
;
9941 _g_free0 (_tmp603_)(_tmp603_ = (g_free (_tmp603_), ((void*)0)));
9942 }
9943 }
9944 if (is_virtual) {
9945 BalaCCodeFunction* _tmp606_;
9946 BalaCCodeFunction* _tmp607_;
9947 BalaDataType* _tmp608_;
9948 gchar* _tmp609_;
9949 gchar* _tmp610_;
9950 BalaCCodeVariableDeclarator* _tmp611_;
9951 BalaCCodeVariableDeclarator* _tmp612_;
9952 BalaCCodeFunction* _tmp613_;
9953 BalaCCodeFunction* _tmp614_;
9954 BalaCCodeIdentifier* _tmp615_;
9955 BalaCCodeIdentifier* _tmp616_;
9956 BalaObjectType* _tmp617_;
9957 BalaCCodeIdentifier* _tmp618_;
9958 BalaCCodeIdentifier* _tmp619_;
9959 BalaGLibValue* _tmp620_;
9960 BalaGLibValue* _tmp621_;
9961 BalaDataType* _tmp622_;
9962 BalaTargetValue* _tmp623_;
9963 BalaTargetValue* _tmp624_;
9964 BalaCCodeExpression* _tmp625_;
9965 _tmp606_ = bala_ccode_base_module_get_ccode (self);
9966 _tmp607_ = _tmp606_;
9967 _tmp608_ = this_type;
9968 _tmp609_ = bala_get_ccode_name ((BalaCodeNode*) _tmp608_);
9969 _tmp610_ = _tmp609_;
9970 _tmp611_ = bala_ccode_variable_declarator_new ("self", NULL((void*)0), NULL((void*)0));
9971 _tmp612_ = _tmp611_;
9972 bala_ccode_function_add_declaration (_tmp607_, _tmp610_, (BalaCCodeDeclarator*) _tmp612_, 0);
9973 _bala_ccode_node_unref0 (_tmp612_)((_tmp612_ == ((void*)0)) ? ((void*)0) : (_tmp612_ = (bala_ccode_node_unref
(_tmp612_), ((void*)0))))
;
9974 _g_free0 (_tmp610_)(_tmp610_ = (g_free (_tmp610_), ((void*)0)));
9975 _tmp613_ = bala_ccode_base_module_get_ccode (self);
9976 _tmp614_ = _tmp613_;
9977 _tmp615_ = bala_ccode_identifier_new ("self");
9978 _tmp616_ = _tmp615_;
9979 _tmp617_ = base_type;
9980 _tmp618_ = bala_ccode_identifier_new ("base");
9981 _tmp619_ = _tmp618_;
9982 _tmp620_ = bala_glib_value_new ((BalaDataType*) _tmp617_, (BalaCCodeExpression*) _tmp619_, TRUE(!(0)));
9983 _tmp621_ = _tmp620_;
9984 _tmp622_ = this_type;
9985 _tmp623_ = bala_ccode_base_module_transform_value (self, (BalaTargetValue*) _tmp621_, _tmp622_, (BalaCodeNode*) acc);
9986 _tmp624_ = _tmp623_;
9987 _tmp625_ = bala_get_cvalue_ (_tmp624_);
9988 bala_ccode_function_add_assignment (_tmp614_, (BalaCCodeExpression*) _tmp616_, _tmp625_);
9989 _bala_target_value_unref0 (_tmp624_)((_tmp624_ == ((void*)0)) ? ((void*)0) : (_tmp624_ = (bala_target_value_unref
(_tmp624_), ((void*)0))))
;
9990 _bala_target_value_unref0 (_tmp621_)((_tmp621_ == ((void*)0)) ? ((void*)0) : (_tmp621_ = (bala_target_value_unref
(_tmp621_), ((void*)0))))
;
9991 _bala_ccode_node_unref0 (_tmp619_)((_tmp619_ == ((void*)0)) ? ((void*)0) : (_tmp619_ = (bala_ccode_node_unref
(_tmp619_), ((void*)0))))
;
9992 _bala_ccode_node_unref0 (_tmp616_)((_tmp616_ == ((void*)0)) ? ((void*)0) : (_tmp616_ = (bala_ccode_node_unref
(_tmp616_), ((void*)0))))
;
9993 }
9994 _tmp628_ = self->priv->_context;
9995 _tmp629_ = bala_code_context_get_analyzer (_tmp628_);
9996 _tmp630_ = _tmp629_;
9997 _tmp631_ = prop;
9998 if (bala_semantic_analyzer_is_gobject_property (_tmp630_, _tmp631_)) {
9999 BalaProperty* _tmp632_;
10000 gboolean _tmp633_;
10001 gboolean _tmp634_;
10002 _tmp632_ = prop;
10003 _tmp633_ = bala_property_get_notify (_tmp632_);
10004 _tmp634_ = _tmp633_;
10005 _tmp627_ = _tmp634_;
10006 } else {
10007 _tmp627_ = FALSE(0);
10008 }
10009 if (_tmp627_) {
10010 gboolean _tmp635_ = FALSE(0);
10011 gboolean _tmp636_;
10012 gboolean _tmp637_;
10013 _tmp636_ = bala_property_accessor_get_writable (acc);
10014 _tmp637_ = _tmp636_;
10015 if (_tmp637_) {
10016 _tmp635_ = TRUE(!(0));
10017 } else {
10018 gboolean _tmp638_;
10019 gboolean _tmp639_;
10020 _tmp638_ = bala_property_accessor_get_construction (acc);
10021 _tmp639_ = _tmp638_;
10022 _tmp635_ = _tmp639_;
10023 }
10024 _tmp626_ = _tmp635_;
10025 } else {
10026 _tmp626_ = FALSE(0);
10027 }
10028 if (_tmp626_) {
10029 BalaCCodeFunctionCall* notify_call = NULL((void*)0);
10030 BalaCCodeIdentifier* _tmp640_;
10031 BalaCCodeIdentifier* _tmp641_;
10032 BalaCCodeFunctionCall* _tmp642_;
10033 BalaCCodeFunctionCall* _tmp643_;
10034 BalaCCodeFunctionCall* _tmp644_;
10035 BalaCCodeIdentifier* _tmp645_;
10036 BalaCCodeIdentifier* _tmp646_;
10037 BalaCCodeCastExpression* _tmp647_;
10038 BalaCCodeCastExpression* _tmp648_;
10039 BalaCCodeFunctionCall* _tmp649_;
10040 BalaProperty* _tmp650_;
10041 BalaCCodeExpression* _tmp651_;
10042 BalaCCodeExpression* _tmp652_;
10043 BalaPropertyAccessor* get_accessor = NULL((void*)0);
10044 BalaProperty* _tmp653_;
10045 BalaPropertyAccessor* _tmp654_;
10046 BalaPropertyAccessor* _tmp655_;
10047 BalaPropertyAccessor* _tmp656_;
10048 gboolean _tmp657_ = FALSE(0);
10049 BalaPropertyAccessor* _tmp658_;
10050 _tmp640_ = bala_ccode_identifier_new ("g_object_notify_by_pspec");
10051 _tmp641_ = _tmp640_;
10052 _tmp642_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp641_);
10053 _tmp643_ = _tmp642_;
10054 _bala_ccode_node_unref0 (_tmp641_)((_tmp641_ == ((void*)0)) ? ((void*)0) : (_tmp641_ = (bala_ccode_node_unref
(_tmp641_), ((void*)0))))
;
10055 notify_call = _tmp643_;
10056 _tmp644_ = notify_call;
10057 _tmp645_ = bala_ccode_identifier_new ("self");
10058 _tmp646_ = _tmp645_;
10059 _tmp647_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp646_, "GObject *");
10060 _tmp648_ = _tmp647_;
10061 bala_ccode_function_call_add_argument (_tmp644_, (BalaCCodeExpression*) _tmp648_);
10062 _bala_ccode_node_unref0 (_tmp648_)((_tmp648_ == ((void*)0)) ? ((void*)0) : (_tmp648_ = (bala_ccode_node_unref
(_tmp648_), ((void*)0))))
;
10063 _bala_ccode_node_unref0 (_tmp646_)((_tmp646_ == ((void*)0)) ? ((void*)0) : (_tmp646_ = (bala_ccode_node_unref
(_tmp646_), ((void*)0))))
;
10064 _tmp649_ = notify_call;
10065 _tmp650_ = prop;
10066 _tmp651_ = bala_ccode_base_module_get_param_spec_cexpression (self, _tmp650_);
10067 _tmp652_ = _tmp651_;
10068 bala_ccode_function_call_add_argument (_tmp649_, _tmp652_);
10069 _bala_ccode_node_unref0 (_tmp652_)((_tmp652_ == ((void*)0)) ? ((void*)0) : (_tmp652_ = (bala_ccode_node_unref
(_tmp652_), ((void*)0))))
;
10070 _tmp653_ = prop;
10071 _tmp654_ = bala_property_get_get_accessor (_tmp653_);
10072 _tmp655_ = _tmp654_;
10073 _tmp656_ = _bala_code_node_ref0 (_tmp655_);
10074 get_accessor = _tmp656_;
10075 _tmp658_ = get_accessor;
10076 if (_tmp658_ != NULL((void*)0)) {
10077 BalaPropertyAccessor* _tmp659_;
10078 gboolean _tmp660_;
10079 gboolean _tmp661_;
10080 _tmp659_ = get_accessor;
10081 _tmp660_ = bala_property_accessor_get_automatic_body (_tmp659_);
10082 _tmp661_ = _tmp660_;
10083 _tmp657_ = _tmp661_;
10084 } else {
10085 _tmp657_ = FALSE(0);
10086 }
10087 if (_tmp657_) {
10088 BalaDataType* property_type = NULL((void*)0);
10089 BalaProperty* _tmp662_;
10090 BalaDataType* _tmp663_;
10091 BalaDataType* _tmp664_;
10092 BalaDataType* _tmp665_;
10093 BalaCCodeFunctionCall* get_call = NULL((void*)0);
10094 BalaPropertyAccessor* _tmp666_;
10095 gchar* _tmp667_;
10096 gchar* _tmp668_;
10097 BalaCCodeIdentifier* _tmp669_;
10098 BalaCCodeIdentifier* _tmp670_;
10099 BalaCCodeFunctionCall* _tmp671_;
10100 BalaCCodeFunctionCall* _tmp672_;
10101 const gchar* _tmp673_ = NULL((void*)0);
10102 BalaCCodeFunctionCall* _tmp674_;
10103 BalaCCodeIdentifier* _tmp675_;
10104 BalaCCodeIdentifier* _tmp676_;
10105 gboolean _tmp677_ = FALSE(0);
10106 BalaDataType* _tmp678_;
10107 BalaBlock* _tmp827_;
10108 BalaBlock* _tmp828_;
10109 BalaCCodeFunction* _tmp829_;
10110 BalaCCodeFunction* _tmp830_;
10111 BalaCCodeFunctionCall* _tmp831_;
10112 BalaCCodeFunction* _tmp832_;
10113 BalaCCodeFunction* _tmp833_;
10114 BalaProperty* _tmp834_;
10115 BalaPropertyAccessor* _tmp835_;
10116 BalaPropertyAccessor* _tmp836_;
10117 BalaDataType* _tmp837_;
10118 BalaDataType* _tmp838_;
10119 _tmp662_ = prop;
10120 _tmp663_ = bala_property_get_property_type (_tmp662_);
10121 _tmp664_ = _tmp663_;
10122 _tmp665_ = _bala_code_node_ref0 (_tmp664_);
10123 property_type = _tmp665_;
10124 _tmp666_ = get_accessor;
10125 _tmp667_ = bala_get_ccode_real_name ((BalaSymbol*) _tmp666_);
10126 _tmp668_ = _tmp667_;
10127 _tmp669_ = bala_ccode_identifier_new (_tmp668_);
10128 _tmp670_ = _tmp669_;
10129 _tmp671_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp670_);
10130 _tmp672_ = _tmp671_;
10131 _bala_ccode_node_unref0 (_tmp670_)((_tmp670_ == ((void*)0)) ? ((void*)0) : (_tmp670_ = (bala_ccode_node_unref
(_tmp670_), ((void*)0))))
;
10132 _g_free0 (_tmp668_)(_tmp668_ = (g_free (_tmp668_), ((void*)0)));
10133 get_call = _tmp672_;
10134 if (is_virtual) {
10135 _tmp673_ = "base";
10136 } else {
10137 _tmp673_ = "self";
10138 }
10139 _tmp674_ = get_call;
10140 _tmp675_ = bala_ccode_identifier_new (_tmp673_);
10141 _tmp676_ = _tmp675_;
10142 bala_ccode_function_call_add_argument (_tmp674_, (BalaCCodeExpression*) _tmp676_);
10143 _bala_ccode_node_unref0 (_tmp676_)((_tmp676_ == ((void*)0)) ? ((void*)0) : (_tmp676_ = (bala_ccode_node_unref
(_tmp676_), ((void*)0))))
;
10144 _tmp678_ = property_type;
10145 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp678_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp678_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
10146 BalaProperty* _tmp679_;
10147 _tmp679_ = prop;
10148 _tmp677_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp679_);
10149 } else {
10150 _tmp677_ = FALSE(0);
10151 }
10152 if (_tmp677_) {
10153 BalaCCodeFunction* _tmp680_;
10154 BalaCCodeFunction* _tmp681_;
10155 BalaDataType* _tmp682_;
10156 gchar* _tmp683_;
10157 gchar* _tmp684_;
10158 BalaCCodeVariableDeclarator* _tmp685_;
10159 BalaCCodeVariableDeclarator* _tmp686_;
10160 BalaCCodeFunction* _tmp687_;
10161 BalaCCodeFunction* _tmp688_;
10162 BalaProperty* _tmp689_;
10163 gchar* _tmp690_;
10164 gchar* _tmp691_;
10165 BalaCCodeVariableDeclarator* _tmp692_;
10166 BalaCCodeVariableDeclarator* _tmp693_;
10167 BalaCCodeFunctionCall* _tmp694_;
10168 BalaCCodeIdentifier* _tmp695_;
10169 BalaCCodeIdentifier* _tmp696_;
10170 BalaCCodeUnaryExpression* _tmp697_;
10171 BalaCCodeUnaryExpression* _tmp698_;
10172 BalaCCodeFunction* _tmp699_;
10173 BalaCCodeFunction* _tmp700_;
10174 BalaCCodeIdentifier* _tmp701_;
10175 BalaCCodeIdentifier* _tmp702_;
10176 BalaCCodeFunctionCall* _tmp703_;
10177 BalaCCodeFunction* _tmp704_;
10178 BalaCCodeFunction* _tmp705_;
10179 BalaCCodeIdentifier* _tmp706_;
10180 BalaCCodeIdentifier* _tmp707_;
10181 BalaCCodeIdentifier* _tmp708_;
10182 BalaCCodeIdentifier* _tmp709_;
10183 BalaCCodeBinaryExpression* _tmp710_;
10184 BalaCCodeBinaryExpression* _tmp711_;
10185 _tmp680_ = bala_ccode_base_module_get_ccode (self);
10186 _tmp681_ = _tmp680_;
10187 _tmp682_ = property_type;
10188 _tmp683_ = bala_get_ccode_name ((BalaCodeNode*) _tmp682_);
10189 _tmp684_ = _tmp683_;
10190 _tmp685_ = bala_ccode_variable_declarator_new ("old_value", NULL((void*)0), NULL((void*)0));
10191 _tmp686_ = _tmp685_;
10192 bala_ccode_function_add_declaration (_tmp681_, _tmp684_, (BalaCCodeDeclarator*) _tmp686_, 0);
10193 _bala_ccode_node_unref0 (_tmp686_)((_tmp686_ == ((void*)0)) ? ((void*)0) : (_tmp686_ = (bala_ccode_node_unref
(_tmp686_), ((void*)0))))
;
10194 _g_free0 (_tmp684_)(_tmp684_ = (g_free (_tmp684_), ((void*)0)));
10195 _tmp687_ = bala_ccode_base_module_get_ccode (self);
10196 _tmp688_ = _tmp687_;
10197 _tmp689_ = prop;
10198 _tmp690_ = bala_get_ccode_array_length_type ((BalaCodeNode*) _tmp689_);
10199 _tmp691_ = _tmp690_;
10200 _tmp692_ = bala_ccode_variable_declarator_new ("old_value_length", NULL((void*)0), NULL((void*)0));
10201 _tmp693_ = _tmp692_;
10202 bala_ccode_function_add_declaration (_tmp688_, _tmp691_, (BalaCCodeDeclarator*) _tmp693_, 0);
10203 _bala_ccode_node_unref0 (_tmp693_)((_tmp693_ == ((void*)0)) ? ((void*)0) : (_tmp693_ = (bala_ccode_node_unref
(_tmp693_), ((void*)0))))
;
10204 _g_free0 (_tmp691_)(_tmp691_ = (g_free (_tmp691_), ((void*)0)));
10205 _tmp694_ = get_call;
10206 _tmp695_ = bala_ccode_identifier_new ("old_value_length");
10207 _tmp696_ = _tmp695_;
10208 _tmp697_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp696_);
10209 _tmp698_ = _tmp697_;
10210 bala_ccode_function_call_add_argument (_tmp694_, (BalaCCodeExpression*) _tmp698_);
10211 _bala_ccode_node_unref0 (_tmp698_)((_tmp698_ == ((void*)0)) ? ((void*)0) : (_tmp698_ = (bala_ccode_node_unref
(_tmp698_), ((void*)0))))
;
10212 _bala_ccode_node_unref0 (_tmp696_)((_tmp696_ == ((void*)0)) ? ((void*)0) : (_tmp696_ = (bala_ccode_node_unref
(_tmp696_), ((void*)0))))
;
10213 _tmp699_ = bala_ccode_base_module_get_ccode (self);
10214 _tmp700_ = _tmp699_;
10215 _tmp701_ = bala_ccode_identifier_new ("old_value");
10216 _tmp702_ = _tmp701_;
10217 _tmp703_ = get_call;
10218 bala_ccode_function_add_assignment (_tmp700_, (BalaCCodeExpression*) _tmp702_, (BalaCCodeExpression*) _tmp703_);
10219 _bala_ccode_node_unref0 (_tmp702_)((_tmp702_ == ((void*)0)) ? ((void*)0) : (_tmp702_ = (bala_ccode_node_unref
(_tmp702_), ((void*)0))))
;
10220 _tmp704_ = bala_ccode_base_module_get_ccode (self);
10221 _tmp705_ = _tmp704_;
10222 _tmp706_ = bala_ccode_identifier_new ("old_value");
10223 _tmp707_ = _tmp706_;
10224 _tmp708_ = bala_ccode_identifier_new ("value");
10225 _tmp709_ = _tmp708_;
10226 _tmp710_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, (BalaCCodeExpression*) _tmp707_, (BalaCCodeExpression*) _tmp709_);
10227 _tmp711_ = _tmp710_;
10228 bala_ccode_function_open_if (_tmp705_, (BalaCCodeExpression*) _tmp711_);
10229 _bala_ccode_node_unref0 (_tmp711_)((_tmp711_ == ((void*)0)) ? ((void*)0) : (_tmp711_ = (bala_ccode_node_unref
(_tmp711_), ((void*)0))))
;
10230 _bala_ccode_node_unref0 (_tmp709_)((_tmp709_ == ((void*)0)) ? ((void*)0) : (_tmp709_ = (bala_ccode_node_unref
(_tmp709_), ((void*)0))))
;
10231 _bala_ccode_node_unref0 (_tmp707_)((_tmp707_ == ((void*)0)) ? ((void*)0) : (_tmp707_ = (bala_ccode_node_unref
(_tmp707_), ((void*)0))))
;
10232 } else {
10233 BalaDataType* _tmp712_;
10234 BalaDataType* _tmp713_;
10235 _tmp712_ = property_type;
10236 _tmp713_ = self->string_type;
10237 if (bala_data_type_compatible (_tmp712_, _tmp713_)) {
10238 BalaCCodeFunction* _tmp714_;
10239 BalaCCodeFunction* _tmp715_;
10240 BalaDataType* _tmp716_;
10241 gchar* _tmp717_;
10242 gchar* _tmp718_;
10243 BalaCCodeVariableDeclarator* _tmp719_;
10244 BalaCCodeVariableDeclarator* _tmp720_;
10245 BalaCCodeFunction* _tmp721_;
10246 BalaCCodeFunction* _tmp722_;
10247 BalaCCodeIdentifier* _tmp723_;
10248 BalaCCodeIdentifier* _tmp724_;
10249 BalaCCodeFunctionCall* _tmp725_;
10250 BalaCCodeFunctionCall* ccall = NULL((void*)0);
10251 BalaCodeContext* _tmp726_;
10252 BalaProfile _tmp727_;
10253 BalaProfile _tmp728_;
10254 BalaCCodeFunctionCall* _tmp740_;
10255 BalaCCodeIdentifier* _tmp741_;
10256 BalaCCodeIdentifier* _tmp742_;
10257 BalaCCodeFunctionCall* _tmp743_;
10258 BalaCCodeIdentifier* _tmp744_;
10259 BalaCCodeIdentifier* _tmp745_;
10260 BalaCCodeFunction* _tmp746_;
10261 BalaCCodeFunction* _tmp747_;
10262 BalaCCodeFunctionCall* _tmp748_;
10263 BalaCCodeConstant* _tmp749_;
10264 BalaCCodeConstant* _tmp750_;
10265 BalaCCodeBinaryExpression* _tmp751_;
10266 BalaCCodeBinaryExpression* _tmp752_;
10267 _tmp714_ = bala_ccode_base_module_get_ccode (self);
10268 _tmp715_ = _tmp714_;
10269 _tmp716_ = property_type;
10270 _tmp717_ = bala_get_ccode_name ((BalaCodeNode*) _tmp716_);
10271 _tmp718_ = _tmp717_;
10272 _tmp719_ = bala_ccode_variable_declarator_new ("old_value", NULL((void*)0), NULL((void*)0));
10273 _tmp720_ = _tmp719_;
10274 bala_ccode_function_add_declaration (_tmp715_, _tmp718_, (BalaCCodeDeclarator*) _tmp720_, 0);
10275 _bala_ccode_node_unref0 (_tmp720_)((_tmp720_ == ((void*)0)) ? ((void*)0) : (_tmp720_ = (bala_ccode_node_unref
(_tmp720_), ((void*)0))))
;
10276 _g_free0 (_tmp718_)(_tmp718_ = (g_free (_tmp718_), ((void*)0)));
10277 _tmp721_ = bala_ccode_base_module_get_ccode (self);
10278 _tmp722_ = _tmp721_;
10279 _tmp723_ = bala_ccode_identifier_new ("old_value");
10280 _tmp724_ = _tmp723_;
10281 _tmp725_ = get_call;
10282 bala_ccode_function_add_assignment (_tmp722_, (BalaCCodeExpression*) _tmp724_, (BalaCCodeExpression*) _tmp725_);
10283 _bala_ccode_node_unref0 (_tmp724_)((_tmp724_ == ((void*)0)) ? ((void*)0) : (_tmp724_ = (bala_ccode_node_unref
(_tmp724_), ((void*)0))))
;
10284 _tmp726_ = self->priv->_context;
10285 _tmp727_ = bala_code_context_get_profile (_tmp726_);
10286 _tmp728_ = _tmp727_;
10287 if (_tmp728_ == BALA_PROFILE_POSIX) {
10288 BalaCCodeFile* _tmp729_;
10289 BalaCCodeIdentifier* _tmp730_;
10290 BalaCCodeIdentifier* _tmp731_;
10291 gchar* _tmp732_;
10292 gchar* _tmp733_;
10293 BalaCCodeIdentifier* _tmp734_;
10294 BalaCCodeIdentifier* _tmp735_;
10295 BalaCCodeFunctionCall* _tmp736_;
10296 _tmp729_ = self->cfile;
10297 bala_ccode_file_add_include (_tmp729_, "string.h", FALSE(0));
10298 _tmp730_ = bala_ccode_identifier_new ("strcmp");
10299 _tmp731_ = _tmp730_;
10300 _tmp732_ = bala_ccode_base_module_generate_cmp_wrapper (self, _tmp731_);
10301 _tmp733_ = _tmp732_;
10302 _tmp734_ = bala_ccode_identifier_new (_tmp733_);
10303 _tmp735_ = _tmp734_;
10304 _tmp736_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp735_);
10305 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
10306 ccall = _tmp736_;
10307 _bala_ccode_node_unref0 (_tmp735_)((_tmp735_ == ((void*)0)) ? ((void*)0) : (_tmp735_ = (bala_ccode_node_unref
(_tmp735_), ((void*)0))))
;
10308 _g_free0 (_tmp733_)(_tmp733_ = (g_free (_tmp733_), ((void*)0)));
10309 _bala_ccode_node_unref0 (_tmp731_)((_tmp731_ == ((void*)0)) ? ((void*)0) : (_tmp731_ = (bala_ccode_node_unref
(_tmp731_), ((void*)0))))
;
10310 } else {
10311 BalaCCodeIdentifier* _tmp737_;
10312 BalaCCodeIdentifier* _tmp738_;
10313 BalaCCodeFunctionCall* _tmp739_;
10314 _tmp737_ = bala_ccode_identifier_new ("g_strcmp0");
10315 _tmp738_ = _tmp737_;
10316 _tmp739_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp738_);
10317 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
10318 ccall = _tmp739_;
10319 _bala_ccode_node_unref0 (_tmp738_)((_tmp738_ == ((void*)0)) ? ((void*)0) : (_tmp738_ = (bala_ccode_node_unref
(_tmp738_), ((void*)0))))
;
10320 }
10321 _tmp740_ = ccall;
10322 _tmp741_ = bala_ccode_identifier_new ("value");
10323 _tmp742_ = _tmp741_;
10324 bala_ccode_function_call_add_argument (_tmp740_, (BalaCCodeExpression*) _tmp742_);
10325 _bala_ccode_node_unref0 (_tmp742_)((_tmp742_ == ((void*)0)) ? ((void*)0) : (_tmp742_ = (bala_ccode_node_unref
(_tmp742_), ((void*)0))))
;
10326 _tmp743_ = ccall;
10327 _tmp744_ = bala_ccode_identifier_new ("old_value");
10328 _tmp745_ = _tmp744_;
10329 bala_ccode_function_call_add_argument (_tmp743_, (BalaCCodeExpression*) _tmp745_);
10330 _bala_ccode_node_unref0 (_tmp745_)((_tmp745_ == ((void*)0)) ? ((void*)0) : (_tmp745_ = (bala_ccode_node_unref
(_tmp745_), ((void*)0))))
;
10331 _tmp746_ = bala_ccode_base_module_get_ccode (self);
10332 _tmp747_ = _tmp746_;
10333 _tmp748_ = ccall;
10334 _tmp749_ = bala_ccode_constant_new ("0");
10335 _tmp750_ = _tmp749_;
10336 _tmp751_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, (BalaCCodeExpression*) _tmp748_, (BalaCCodeExpression*) _tmp750_);
10337 _tmp752_ = _tmp751_;
10338 bala_ccode_function_open_if (_tmp747_, (BalaCCodeExpression*) _tmp752_);
10339 _bala_ccode_node_unref0 (_tmp752_)((_tmp752_ == ((void*)0)) ? ((void*)0) : (_tmp752_ = (bala_ccode_node_unref
(_tmp752_), ((void*)0))))
;
10340 _bala_ccode_node_unref0 (_tmp750_)((_tmp750_ == ((void*)0)) ? ((void*)0) : (_tmp750_ = (bala_ccode_node_unref
(_tmp750_), ((void*)0))))
;
10341 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
10342 } else {
10343 BalaDataType* _tmp753_;
10344 _tmp753_ = property_type;
10345 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp753_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp753_); GType __t = ((bala_struct_value_type_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
10346 BalaCCodeFunction* _tmp754_;
10347 BalaCCodeFunction* _tmp755_;
10348 BalaDataType* _tmp756_;
10349 gchar* _tmp757_;
10350 gchar* _tmp758_;
10351 BalaCCodeVariableDeclarator* _tmp759_;
10352 BalaCCodeVariableDeclarator* _tmp760_;
10353 BalaDataType* _tmp761_;
10354 gboolean _tmp762_;
10355 gboolean _tmp763_;
10356 gchar* equalfunc = NULL((void*)0);
10357 BalaDataType* _tmp777_;
10358 BalaTypeSymbol* _tmp778_;
10359 BalaTypeSymbol* _tmp779_;
10360 gchar* _tmp780_;
10361 BalaCCodeFunctionCall* ccall = NULL((void*)0);
10362 const gchar* _tmp781_;
10363 BalaCCodeIdentifier* _tmp782_;
10364 BalaCCodeIdentifier* _tmp783_;
10365 BalaCCodeFunctionCall* _tmp784_;
10366 BalaCCodeFunctionCall* _tmp785_;
10367 BalaCCodeFunctionCall* _tmp786_;
10368 BalaCCodeIdentifier* _tmp787_;
10369 BalaCCodeIdentifier* _tmp788_;
10370 BalaDataType* _tmp789_;
10371 gboolean _tmp790_;
10372 gboolean _tmp791_;
10373 BalaCCodeFunction* _tmp800_;
10374 BalaCCodeFunction* _tmp801_;
10375 BalaCCodeFunctionCall* _tmp802_;
10376 BalaCCodeConstant* _tmp803_;
10377 BalaCCodeConstant* _tmp804_;
10378 BalaCCodeBinaryExpression* _tmp805_;
10379 BalaCCodeBinaryExpression* _tmp806_;
10380 _tmp754_ = bala_ccode_base_module_get_ccode (self);
10381 _tmp755_ = _tmp754_;
10382 _tmp756_ = property_type;
10383 _tmp757_ = bala_get_ccode_name ((BalaCodeNode*) _tmp756_);
10384 _tmp758_ = _tmp757_;
10385 _tmp759_ = bala_ccode_variable_declarator_new ("old_value", NULL((void*)0), NULL((void*)0));
10386 _tmp760_ = _tmp759_;
10387 bala_ccode_function_add_declaration (_tmp755_, _tmp758_, (BalaCCodeDeclarator*) _tmp760_, 0);
10388 _bala_ccode_node_unref0 (_tmp760_)((_tmp760_ == ((void*)0)) ? ((void*)0) : (_tmp760_ = (bala_ccode_node_unref
(_tmp760_), ((void*)0))))
;
10389 _g_free0 (_tmp758_)(_tmp758_ = (g_free (_tmp758_), ((void*)0)));
10390 _tmp761_ = property_type;
10391 _tmp762_ = bala_data_type_get_nullable (_tmp761_);
10392 _tmp763_ = _tmp762_;
10393 if (_tmp763_) {
10394 BalaCCodeFunction* _tmp764_;
10395 BalaCCodeFunction* _tmp765_;
10396 BalaCCodeIdentifier* _tmp766_;
10397 BalaCCodeIdentifier* _tmp767_;
10398 BalaCCodeFunctionCall* _tmp768_;
10399 _tmp764_ = bala_ccode_base_module_get_ccode (self);
10400 _tmp765_ = _tmp764_;
10401 _tmp766_ = bala_ccode_identifier_new ("old_value");
10402 _tmp767_ = _tmp766_;
10403 _tmp768_ = get_call;
10404 bala_ccode_function_add_assignment (_tmp765_, (BalaCCodeExpression*) _tmp767_, (BalaCCodeExpression*) _tmp768_);
10405 _bala_ccode_node_unref0 (_tmp767_)((_tmp767_ == ((void*)0)) ? ((void*)0) : (_tmp767_ = (bala_ccode_node_unref
(_tmp767_), ((void*)0))))
;
10406 } else {
10407 BalaCCodeFunctionCall* _tmp769_;
10408 BalaCCodeIdentifier* _tmp770_;
10409 BalaCCodeIdentifier* _tmp771_;
10410 BalaCCodeUnaryExpression* _tmp772_;
10411 BalaCCodeUnaryExpression* _tmp773_;
10412 BalaCCodeFunction* _tmp774_;
10413 BalaCCodeFunction* _tmp775_;
10414 BalaCCodeFunctionCall* _tmp776_;
10415 _tmp769_ = get_call;
10416 _tmp770_ = bala_ccode_identifier_new ("old_value");
10417 _tmp771_ = _tmp770_;
10418 _tmp772_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp771_);
10419 _tmp773_ = _tmp772_;
10420 bala_ccode_function_call_add_argument (_tmp769_, (BalaCCodeExpression*) _tmp773_);
10421 _bala_ccode_node_unref0 (_tmp773_)((_tmp773_ == ((void*)0)) ? ((void*)0) : (_tmp773_ = (bala_ccode_node_unref
(_tmp773_), ((void*)0))))
;
10422 _bala_ccode_node_unref0 (_tmp771_)((_tmp771_ == ((void*)0)) ? ((void*)0) : (_tmp771_ = (bala_ccode_node_unref
(_tmp771_), ((void*)0))))
;
10423 _tmp774_ = bala_ccode_base_module_get_ccode (self);
10424 _tmp775_ = _tmp774_;
10425 _tmp776_ = get_call;
10426 bala_ccode_function_add_expression (_tmp775_, (BalaCCodeExpression*) _tmp776_);
10427 }
10428 _tmp777_ = property_type;
10429 _tmp778_ = bala_data_type_get_type_symbol (_tmp777_);
10430 _tmp779_ = _tmp778_;
10431 _tmp780_ = bala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp779_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp779_), ((bala_struct_get_type ())))))
);
10432 equalfunc = _tmp780_;
10433 _tmp781_ = equalfunc;
10434 _tmp782_ = bala_ccode_identifier_new (_tmp781_);
10435 _tmp783_ = _tmp782_;
10436 _tmp784_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp783_);
10437 _tmp785_ = _tmp784_;
10438 _bala_ccode_node_unref0 (_tmp783_)((_tmp783_ == ((void*)0)) ? ((void*)0) : (_tmp783_ = (bala_ccode_node_unref
(_tmp783_), ((void*)0))))
;
10439 ccall = _tmp785_;
10440 _tmp786_ = ccall;
10441 _tmp787_ = bala_ccode_identifier_new ("value");
10442 _tmp788_ = _tmp787_;
10443 bala_ccode_function_call_add_argument (_tmp786_, (BalaCCodeExpression*) _tmp788_);
10444 _bala_ccode_node_unref0 (_tmp788_)((_tmp788_ == ((void*)0)) ? ((void*)0) : (_tmp788_ = (bala_ccode_node_unref
(_tmp788_), ((void*)0))))
;
10445 _tmp789_ = property_type;
10446 _tmp790_ = bala_data_type_get_nullable (_tmp789_);
10447 _tmp791_ = _tmp790_;
10448 if (_tmp791_) {
10449 BalaCCodeFunctionCall* _tmp792_;
10450 BalaCCodeIdentifier* _tmp793_;
10451 BalaCCodeIdentifier* _tmp794_;
10452 _tmp792_ = ccall;
10453 _tmp793_ = bala_ccode_identifier_new ("old_value");
10454 _tmp794_ = _tmp793_;
10455 bala_ccode_function_call_add_argument (_tmp792_, (BalaCCodeExpression*) _tmp794_);
10456 _bala_ccode_node_unref0 (_tmp794_)((_tmp794_ == ((void*)0)) ? ((void*)0) : (_tmp794_ = (bala_ccode_node_unref
(_tmp794_), ((void*)0))))
;
10457 } else {
10458 BalaCCodeFunctionCall* _tmp795_;
10459 BalaCCodeIdentifier* _tmp796_;
10460 BalaCCodeIdentifier* _tmp797_;
10461 BalaCCodeUnaryExpression* _tmp798_;
10462 BalaCCodeUnaryExpression* _tmp799_;
10463 _tmp795_ = ccall;
10464 _tmp796_ = bala_ccode_identifier_new ("old_value");
10465 _tmp797_ = _tmp796_;
10466 _tmp798_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp797_);
10467 _tmp799_ = _tmp798_;
10468 bala_ccode_function_call_add_argument (_tmp795_, (BalaCCodeExpression*) _tmp799_);
10469 _bala_ccode_node_unref0 (_tmp799_)((_tmp799_ == ((void*)0)) ? ((void*)0) : (_tmp799_ = (bala_ccode_node_unref
(_tmp799_), ((void*)0))))
;
10470 _bala_ccode_node_unref0 (_tmp797_)((_tmp797_ == ((void*)0)) ? ((void*)0) : (_tmp797_ = (bala_ccode_node_unref
(_tmp797_), ((void*)0))))
;
10471 }
10472 _tmp800_ = bala_ccode_base_module_get_ccode (self);
10473 _tmp801_ = _tmp800_;
10474 _tmp802_ = ccall;
10475 _tmp803_ = bala_ccode_constant_new ("TRUE");
10476 _tmp804_ = _tmp803_;
10477 _tmp805_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, (BalaCCodeExpression*) _tmp802_, (BalaCCodeExpression*) _tmp804_);
10478 _tmp806_ = _tmp805_;
10479 bala_ccode_function_open_if (_tmp801_, (BalaCCodeExpression*) _tmp806_);
10480 _bala_ccode_node_unref0 (_tmp806_)((_tmp806_ == ((void*)0)) ? ((void*)0) : (_tmp806_ = (bala_ccode_node_unref
(_tmp806_), ((void*)0))))
;
10481 _bala_ccode_node_unref0 (_tmp804_)((_tmp804_ == ((void*)0)) ? ((void*)0) : (_tmp804_ = (bala_ccode_node_unref
(_tmp804_), ((void*)0))))
;
10482 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
10483 _g_free0 (equalfunc)(equalfunc = (g_free (equalfunc), ((void*)0)));
10484 } else {
10485 BalaCCodeFunction* _tmp807_;
10486 BalaCCodeFunction* _tmp808_;
10487 BalaDataType* _tmp809_;
10488 gchar* _tmp810_;
10489 gchar* _tmp811_;
10490 BalaCCodeVariableDeclarator* _tmp812_;
10491 BalaCCodeVariableDeclarator* _tmp813_;
10492 BalaCCodeFunction* _tmp814_;
10493 BalaCCodeFunction* _tmp815_;
10494 BalaCCodeIdentifier* _tmp816_;
10495 BalaCCodeIdentifier* _tmp817_;
10496 BalaCCodeFunctionCall* _tmp818_;
10497 BalaCCodeFunction* _tmp819_;
10498 BalaCCodeFunction* _tmp820_;
10499 BalaCCodeIdentifier* _tmp821_;
10500 BalaCCodeIdentifier* _tmp822_;
10501 BalaCCodeIdentifier* _tmp823_;
10502 BalaCCodeIdentifier* _tmp824_;
10503 BalaCCodeBinaryExpression* _tmp825_;
10504 BalaCCodeBinaryExpression* _tmp826_;
10505 _tmp807_ = bala_ccode_base_module_get_ccode (self);
10506 _tmp808_ = _tmp807_;
10507 _tmp809_ = property_type;
10508 _tmp810_ = bala_get_ccode_name ((BalaCodeNode*) _tmp809_);
10509 _tmp811_ = _tmp810_;
10510 _tmp812_ = bala_ccode_variable_declarator_new ("old_value", NULL((void*)0), NULL((void*)0));
10511 _tmp813_ = _tmp812_;
10512 bala_ccode_function_add_declaration (_tmp808_, _tmp811_, (BalaCCodeDeclarator*) _tmp813_, 0);
10513 _bala_ccode_node_unref0 (_tmp813_)((_tmp813_ == ((void*)0)) ? ((void*)0) : (_tmp813_ = (bala_ccode_node_unref
(_tmp813_), ((void*)0))))
;
10514 _g_free0 (_tmp811_)(_tmp811_ = (g_free (_tmp811_), ((void*)0)));
10515 _tmp814_ = bala_ccode_base_module_get_ccode (self);
10516 _tmp815_ = _tmp814_;
10517 _tmp816_ = bala_ccode_identifier_new ("old_value");
10518 _tmp817_ = _tmp816_;
10519 _tmp818_ = get_call;
10520 bala_ccode_function_add_assignment (_tmp815_, (BalaCCodeExpression*) _tmp817_, (BalaCCodeExpression*) _tmp818_);
10521 _bala_ccode_node_unref0 (_tmp817_)((_tmp817_ == ((void*)0)) ? ((void*)0) : (_tmp817_ = (bala_ccode_node_unref
(_tmp817_), ((void*)0))))
;
10522 _tmp819_ = bala_ccode_base_module_get_ccode (self);
10523 _tmp820_ = _tmp819_;
10524 _tmp821_ = bala_ccode_identifier_new ("old_value");
10525 _tmp822_ = _tmp821_;
10526 _tmp823_ = bala_ccode_identifier_new ("value");
10527 _tmp824_ = _tmp823_;
10528 _tmp825_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, (BalaCCodeExpression*) _tmp822_, (BalaCCodeExpression*) _tmp824_);
10529 _tmp826_ = _tmp825_;
10530 bala_ccode_function_open_if (_tmp820_, (BalaCCodeExpression*) _tmp826_);
10531 _bala_ccode_node_unref0 (_tmp826_)((_tmp826_ == ((void*)0)) ? ((void*)0) : (_tmp826_ = (bala_ccode_node_unref
(_tmp826_), ((void*)0))))
;
10532 _bala_ccode_node_unref0 (_tmp824_)((_tmp824_ == ((void*)0)) ? ((void*)0) : (_tmp824_ = (bala_ccode_node_unref
(_tmp824_), ((void*)0))))
;
10533 _bala_ccode_node_unref0 (_tmp822_)((_tmp822_ == ((void*)0)) ? ((void*)0) : (_tmp822_ = (bala_ccode_node_unref
(_tmp822_), ((void*)0))))
;
10534 }
10535 }
10536 }
10537 _tmp827_ = bala_subroutine_get_body ((BalaSubroutine*) acc);
10538 _tmp828_ = _tmp827_;
10539 bala_code_node_emit ((BalaCodeNode*) _tmp828_, (BalaCodeGenerator*) self);
10540 _tmp829_ = bala_ccode_base_module_get_ccode (self);
10541 _tmp830_ = _tmp829_;
10542 _tmp831_ = notify_call;
10543 bala_ccode_function_add_expression (_tmp830_, (BalaCCodeExpression*) _tmp831_);
10544 _tmp832_ = bala_ccode_base_module_get_ccode (self);
10545 _tmp833_ = _tmp832_;
10546 bala_ccode_function_close (_tmp833_);
10547 _tmp834_ = prop;
10548 _tmp835_ = bala_property_get_get_accessor (_tmp834_);
10549 _tmp836_ = _tmp835_;
10550 _tmp837_ = bala_property_accessor_get_value_type (_tmp836_);
10551 _tmp838_ = _tmp837_;
10552 if (bala_data_type_is_disposable (_tmp838_)) {
10553 BalaGLibValue* old_value = NULL((void*)0);
10554 BalaProperty* _tmp839_;
10555 BalaPropertyAccessor* _tmp840_;
10556 BalaPropertyAccessor* _tmp841_;
10557 BalaDataType* _tmp842_;
10558 BalaDataType* _tmp843_;
10559 BalaCCodeIdentifier* _tmp844_;
10560 BalaCCodeIdentifier* _tmp845_;
10561 BalaGLibValue* _tmp846_;
10562 BalaGLibValue* _tmp847_;
10563 gboolean _tmp848_ = FALSE(0);
10564 BalaDataType* _tmp849_;
10565 BalaCCodeFunction* _tmp854_;
10566 BalaCCodeFunction* _tmp855_;
10567 BalaGLibValue* _tmp856_;
10568 BalaCCodeExpression* _tmp857_;
10569 BalaCCodeExpression* _tmp858_;
10570 _tmp839_ = prop;
10571 _tmp840_ = bala_property_get_get_accessor (_tmp839_);
10572 _tmp841_ = _tmp840_;
10573 _tmp842_ = bala_property_accessor_get_value_type (_tmp841_);
10574 _tmp843_ = _tmp842_;
10575 _tmp844_ = bala_ccode_identifier_new ("old_value");
10576 _tmp845_ = _tmp844_;
10577 _tmp846_ = bala_glib_value_new (_tmp843_, (BalaCCodeExpression*) _tmp845_, TRUE(!(0)));
10578 _tmp847_ = _tmp846_;
10579 _bala_ccode_node_unref0 (_tmp845_)((_tmp845_ == ((void*)0)) ? ((void*)0) : (_tmp845_ = (bala_ccode_node_unref
(_tmp845_), ((void*)0))))
;
10580 old_value = _tmp847_;
10581 _tmp849_ = property_type;
10582 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp849_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp849_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
10583 BalaProperty* _tmp850_;
10584 _tmp850_ = prop;
10585 _tmp848_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp850_);
10586 } else {
10587 _tmp848_ = FALSE(0);
10588 }
10589 if (_tmp848_) {
10590 BalaGLibValue* _tmp851_;
10591 BalaCCodeIdentifier* _tmp852_;
10592 BalaCCodeIdentifier* _tmp853_;
10593 _tmp851_ = old_value;
10594 _tmp852_ = bala_ccode_identifier_new ("old_value_length");
10595 _tmp853_ = _tmp852_;
10596 bala_glib_value_append_array_length_cvalue (_tmp851_, (BalaCCodeExpression*) _tmp853_);
10597 _bala_ccode_node_unref0 (_tmp853_)((_tmp853_ == ((void*)0)) ? ((void*)0) : (_tmp853_ = (bala_ccode_node_unref
(_tmp853_), ((void*)0))))
;
10598 }
10599 _tmp854_ = bala_ccode_base_module_get_ccode (self);
10600 _tmp855_ = _tmp854_;
10601 _tmp856_ = old_value;
10602 _tmp857_ = bala_ccode_base_module_destroy_value (self, (BalaTargetValue*) _tmp856_, FALSE(0));
10603 _tmp858_ = _tmp857_;
10604 bala_ccode_function_add_expression (_tmp855_, _tmp858_);
10605 _bala_ccode_node_unref0 (_tmp858_)((_tmp858_ == ((void*)0)) ? ((void*)0) : (_tmp858_ = (bala_ccode_node_unref
(_tmp858_), ((void*)0))))
;
10606 _bala_target_value_unref0 (old_value)((old_value == ((void*)0)) ? ((void*)0) : (old_value = (bala_target_value_unref
(old_value), ((void*)0))))
;
10607 }
10608 _bala_ccode_node_unref0 (get_call)((get_call == ((void*)0)) ? ((void*)0) : (get_call = (bala_ccode_node_unref
(get_call), ((void*)0))))
;
10609 _bala_code_node_unref0 (property_type)((property_type == ((void*)0)) ? ((void*)0) : (property_type =
(bala_code_node_unref (property_type), ((void*)0))))
;
10610 } else {
10611 BalaBlock* _tmp859_;
10612 BalaBlock* _tmp860_;
10613 BalaCCodeFunction* _tmp861_;
10614 BalaCCodeFunction* _tmp862_;
10615 BalaCCodeFunctionCall* _tmp863_;
10616 _tmp859_ = bala_subroutine_get_body ((BalaSubroutine*) acc);
10617 _tmp860_ = _tmp859_;
10618 bala_code_node_emit ((BalaCodeNode*) _tmp860_, (BalaCodeGenerator*) self);
10619 _tmp861_ = bala_ccode_base_module_get_ccode (self);
10620 _tmp862_ = _tmp861_;
10621 _tmp863_ = notify_call;
10622 bala_ccode_function_add_expression (_tmp862_, (BalaCCodeExpression*) _tmp863_);
10623 }
10624 _bala_code_node_unref0 (get_accessor)((get_accessor == ((void*)0)) ? ((void*)0) : (get_accessor = (
bala_code_node_unref (get_accessor), ((void*)0))))
;
10625 _bala_ccode_node_unref0 (notify_call)((notify_call == ((void*)0)) ? ((void*)0) : (notify_call = (bala_ccode_node_unref
(notify_call), ((void*)0))))
;
10626 } else {
10627 BalaBlock* _tmp864_;
10628 BalaBlock* _tmp865_;
10629 _tmp864_ = bala_subroutine_get_body ((BalaSubroutine*) acc);
10630 _tmp865_ = _tmp864_;
10631 bala_code_node_emit ((BalaCodeNode*) _tmp865_, (BalaCodeGenerator*) self);
10632 }
10633 _tmp866_ = bala_ccode_base_module_get_current_method_inner_error (self);
10634 _tmp867_ = _tmp866_;
10635 if (_tmp867_) {
10636 BalaCCodeFunction* _tmp868_;
10637 BalaCCodeFunction* _tmp869_;
10638 gint _tmp870_;
10639 gint _tmp871_;
10640 gchar* _tmp872_;
10641 gchar* _tmp873_;
10642 BalaCCodeConstant* _tmp874_;
10643 BalaCCodeConstant* _tmp875_;
10644 BalaCCodeVariableDeclarator* _tmp876_;
10645 BalaCCodeVariableDeclarator* _tmp877_;
10646 _tmp868_ = bala_ccode_base_module_get_ccode (self);
10647 _tmp869_ = _tmp868_;
10648 _tmp870_ = bala_ccode_base_module_get_current_inner_error_id (self);
10649 _tmp871_ = _tmp870_;
10650 _tmp872_ = g_strdup_printf ("_inner_error%d_", _tmp871_);
10651 _tmp873_ = _tmp872_;
10652 _tmp874_ = bala_ccode_constant_new ("NULL");
10653 _tmp875_ = _tmp874_;
10654 _tmp876_ = bala_ccode_variable_declarator_new_zero (_tmp873_, (BalaCCodeExpression*) _tmp875_, NULL((void*)0));
10655 _tmp877_ = _tmp876_;
10656 bala_ccode_function_add_declaration (_tmp869_, "GError*", (BalaCCodeDeclarator*) _tmp877_, 0);
10657 _bala_ccode_node_unref0 (_tmp877_)((_tmp877_ == ((void*)0)) ? ((void*)0) : (_tmp877_ = (bala_ccode_node_unref
(_tmp877_), ((void*)0))))
;
10658 _bala_ccode_node_unref0 (_tmp875_)((_tmp875_ == ((void*)0)) ? ((void*)0) : (_tmp875_ = (bala_ccode_node_unref
(_tmp875_), ((void*)0))))
;
10659 _g_free0 (_tmp873_)(_tmp873_ = (g_free (_tmp873_), ((void*)0)));
10660 }
10661 bala_ccode_base_module_pop_function (self);
10662 _tmp878_ = self->cfile;
10663 _tmp879_ = function;
10664 bala_ccode_file_add_function (_tmp878_, _tmp879_);
10665 _bala_code_node_unref0 (base_type)((base_type == ((void*)0)) ? ((void*)0) : (base_type = (bala_code_node_unref
(base_type), ((void*)0))))
;
10666 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
10667 _g_free0 (cname)(cname = (g_free (cname), ((void*)0)));
10668 }
10669 bala_ccode_base_module_pop_line (self);
10670 bala_ccode_base_module_pop_context (self);
10671 _bala_ccode_node_unref0 (cvalueparam)((cvalueparam == ((void*)0)) ? ((void*)0) : (cvalueparam = (bala_ccode_node_unref
(cvalueparam), ((void*)0))))
;
10672 _bala_ccode_node_unref0 (cselfparam)((cselfparam == ((void*)0)) ? ((void*)0) : (cselfparam = (bala_ccode_node_unref
(cselfparam), ((void*)0))))
;
10673 _bala_code_node_unref0 (this_type)((this_type == ((void*)0)) ? ((void*)0) : (this_type = (bala_code_node_unref
(this_type), ((void*)0))))
;
10674 _bala_code_node_unref0 (t)((t == ((void*)0)) ? ((void*)0) : (t = (bala_code_node_unref (
t), ((void*)0))))
;
10675 _bala_code_node_unref0 (prop)((prop == ((void*)0)) ? ((void*)0) : (prop = (bala_code_node_unref
(prop), ((void*)0))))
;
10676}
10677
10678static void
10679bala_ccode_base_module_real_visit_destructor (BalaCodeVisitor* base,
10680 BalaDestructor* d)
10681{
10682 BalaCCodeBaseModule * self;
10683 gboolean _tmp0_ = FALSE(0);
10684 BalaMemberBinding _tmp1_;
10685 BalaMemberBinding _tmp2_;
10686 self = (BalaCCodeBaseModule*) base;
10687 g_return_if_fail (d != NULL)do { if ((d != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "d != NULL"); return
; } } while (0)
;
10688 _tmp1_ = bala_destructor_get_binding (d);
10689 _tmp2_ = _tmp1_;
10690 if (_tmp2_ == BALA_MEMBER_BINDING_STATIC) {
10691 _tmp0_ = !self->in_plugin;
10692 } else {
10693 _tmp0_ = FALSE(0);
10694 }
10695 if (_tmp0_) {
10696 BalaSourceReference* _tmp3_;
10697 BalaSourceReference* _tmp4_;
10698 _tmp3_ = bala_code_node_get_source_reference ((BalaCodeNode*) d);
10699 _tmp4_ = _tmp3_;
10700 bala_report_error (_tmp4_, "static destructors are only supported for dynamic types");
10701 bala_code_node_set_error ((BalaCodeNode*) d, TRUE(!(0)));
10702 return;
10703 }
10704}
10705
10706gint
10707bala_ccode_base_module_get_block_id (BalaCCodeBaseModule* self,
10708 BalaBlock* b)
10709{
10710 gint _result_ = 0;
10711 BalaMap* _tmp0_;
10712 gpointer _tmp1_;
10713 gint result = 0;
10714 g_return_val_if_fail (self != NULL, 0)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (0); } } while (0)
;
10715 g_return_val_if_fail (b != NULL, 0)do { if ((b != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "b != NULL"); return
(0); } } while (0)
;
10716 _tmp0_ = self->priv->block_map;
10717 _tmp1_ = bala_map_get (_tmp0_, b);
10718 _result_ = (gint) ((gintptr) _tmp1_);
10719 if (_result_ == 0) {
10720 gint _tmp2_;
10721 BalaMap* _tmp3_;
10722 self->priv->next_block_id = self->priv->next_block_id + 1;
10723 _tmp2_ = self->priv->next_block_id;
10724 _result_ = _tmp2_;
10725 _tmp3_ = self->priv->block_map;
10726 bala_map_set (_tmp3_, b, (gpointer) ((gintptr) _result_));
10727 }
10728 result = _result_;
10729 return result;
10730}
10731
10732gboolean
10733bala_ccode_base_module_no_implicit_copy (BalaCCodeBaseModule* self,
10734 BalaDataType* type)
10735{
10736 BalaClass* cl = NULL((void*)0);
10737 BalaTypeSymbol* _tmp0_;
10738 BalaTypeSymbol* _tmp1_;
10739 gboolean _tmp2_ = FALSE(0);
10740 gboolean _tmp3_ = FALSE(0);
10741 gboolean result = FALSE(0);
10742 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
10743 g_return_val_if_fail (type != NULL, FALSE)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return ((0)); } } while (0)
;
10744 _tmp0_ = bala_data_type_get_type_symbol (type);
10745 _tmp1_ = _tmp0_;
10746 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp1_) : NULL((void*)0);
10747 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
10748 _tmp3_ = TRUE(!(0));
10749 } else {
10750 _tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_array_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
10751 }
10752 if (_tmp3_) {
10753 _tmp2_ = TRUE(!(0));
10754 } else {
10755 gboolean _tmp4_ = FALSE(0);
10756 gboolean _tmp5_ = FALSE(0);
10757 gboolean _tmp6_ = FALSE(0);
10758 BalaClass* _tmp7_;
10759 _tmp7_ = cl;
10760 if (_tmp7_ != NULL((void*)0)) {
10761 BalaClass* _tmp8_;
10762 gboolean _tmp9_;
10763 gboolean _tmp10_;
10764 _tmp8_ = cl;
10765 _tmp9_ = bala_class_get_is_immutable (_tmp8_);
10766 _tmp10_ = _tmp9_;
10767 _tmp6_ = !_tmp10_;
10768 } else {
10769 _tmp6_ = FALSE(0);
10770 }
10771 if (_tmp6_) {
10772 BalaClass* _tmp11_;
10773 _tmp11_ = cl;
10774 _tmp5_ = !bala_is_reference_counting ((BalaTypeSymbol*) _tmp11_);
10775 } else {
10776 _tmp5_ = FALSE(0);
10777 }
10778 if (_tmp5_) {
10779 BalaClass* _tmp12_;
10780 _tmp12_ = cl;
10781 _tmp4_ = !bala_get_ccode_is_gboxed ((BalaTypeSymbol*) _tmp12_);
10782 } else {
10783 _tmp4_ = FALSE(0);
10784 }
10785 _tmp2_ = _tmp4_;
10786 }
10787 result = _tmp2_;
10788 return result;
10789}
10790
10791static void
10792bala_ccode_base_module_capture_parameter (BalaCCodeBaseModule* self,
10793 BalaParameter* param,
10794 BalaCCodeStruct* data,
10795 gint block_id)
10796{
10797 BalaDataType* _tmp0_;
10798 BalaDataType* _tmp1_;
10799 BalaCCodeFile* _tmp2_;
10800 BalaDataType* param_type = NULL((void*)0);
10801 BalaDataType* _tmp3_;
10802 BalaDataType* _tmp4_;
10803 BalaDataType* _tmp5_;
10804 BalaDataType* _tmp6_;
10805 BalaDataType* _tmp7_;
10806 gboolean _tmp8_;
10807 gboolean _tmp9_;
10808 BalaDataType* _tmp13_;
10809 gchar* _tmp14_;
10810 gchar* _tmp15_;
10811 gchar* _tmp16_;
10812 gchar* _tmp17_;
10813 BalaDataType* _tmp18_;
10814 BalaCCodeDeclaratorSuffix* _tmp19_;
10815 BalaCCodeDeclaratorSuffix* _tmp20_;
10816 BalaTargetValue* value = NULL((void*)0);
10817 BalaTargetValue* _tmp21_;
10818 BalaArrayType* array_type = NULL((void*)0);
10819 BalaDataType* _tmp22_;
10820 BalaDataType* _tmp23_;
10821 BalaArrayType* _tmp24_;
10822 BalaDelegateType* deleg_type = NULL((void*)0);
10823 BalaDataType* _tmp25_;
10824 BalaDataType* _tmp26_;
10825 BalaDelegateType* _tmp27_;
10826 gboolean _tmp28_ = FALSE(0);
10827 gboolean _tmp29_ = FALSE(0);
10828 BalaArrayType* _tmp30_;
10829 BalaTargetValue* _tmp66_;
10830 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
10831 g_return_if_fail (param != NULL)do { if ((param != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "param != NULL"
); return; } } while (0)
;
10832 g_return_if_fail (data != NULL)do { if ((data != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "data != NULL"
); return; } } while (0)
;
10833 _tmp0_ = bala_variable_get_variable_type ((BalaVariable*) param);
10834 _tmp1_ = _tmp0_;
10835 _tmp2_ = self->cfile;
10836 bala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
10837 _tmp3_ = bala_variable_get_variable_type ((BalaVariable*) param);
10838 _tmp4_ = _tmp3_;
10839 _tmp5_ = bala_data_type_copy (_tmp4_);
10840 param_type = _tmp5_;
10841 _tmp6_ = bala_variable_get_variable_type ((BalaVariable*) param);
10842 _tmp7_ = _tmp6_;
10843 _tmp8_ = bala_data_type_get_value_owned (_tmp7_);
10844 _tmp9_ = _tmp8_;
10845 if (!_tmp9_) {
10846 BalaDataType* _tmp10_;
10847 BalaDataType* _tmp11_;
10848 BalaDataType* _tmp12_;
10849 _tmp10_ = param_type;
10850 _tmp11_ = bala_variable_get_variable_type ((BalaVariable*) param);
10851 _tmp12_ = _tmp11_;
10852 bala_data_type_set_value_owned (_tmp10_, !bala_ccode_base_module_no_implicit_copy (self, _tmp12_));
10853 }
10854 _tmp13_ = param_type;
10855 _tmp14_ = bala_get_ccode_name ((BalaCodeNode*) _tmp13_);
10856 _tmp15_ = _tmp14_;
10857 _tmp16_ = bala_get_ccode_name ((BalaCodeNode*) param);
10858 _tmp17_ = _tmp16_;
10859 _tmp18_ = param_type;
10860 _tmp19_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp18_);
10861 _tmp20_ = _tmp19_;
10862 bala_ccode_struct_add_field (data, _tmp15_, _tmp17_, 0, _tmp20_);
10863 _bala_ccode_declarator_suffix_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_declarator_suffix_unref
(_tmp20_), ((void*)0))))
;
10864 _g_free0 (_tmp17_)(_tmp17_ = (g_free (_tmp17_), ((void*)0)));
10865 _g_free0 (_tmp15_)(_tmp15_ = (g_free (_tmp15_), ((void*)0)));
10866 bala_parameter_set_captured (param, FALSE(0));
10867 _tmp21_ = bala_code_generator_load_parameter ((BalaCodeGenerator*) self, param, NULL((void*)0));
10868 value = _tmp21_;
10869 _tmp22_ = bala_variable_get_variable_type ((BalaVariable*) param);
10870 _tmp23_ = _tmp22_;
10871 _tmp24_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp23_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp23_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp23_) : NULL((void*)0));
10872 array_type = _tmp24_;
10873 _tmp25_ = bala_variable_get_variable_type ((BalaVariable*) param);
10874 _tmp26_ = _tmp25_;
10875 _tmp27_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp26_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp26_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaDelegateType*) _tmp26_) : NULL((void*)0));
10876 deleg_type = _tmp27_;
10877 _tmp30_ = array_type;
10878 if (_tmp30_ != NULL((void*)0)) {
10879 _tmp29_ = bala_get_ccode_array_length ((BalaCodeNode*) param);
10880 } else {
10881 _tmp29_ = FALSE(0);
10882 }
10883 if (_tmp29_) {
10884 BalaArrayType* _tmp31_;
10885 gboolean _tmp32_;
10886 gboolean _tmp33_;
10887 _tmp31_ = array_type;
10888 _tmp32_ = bala_array_type_get_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp31_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp31_), ((bala_array_type_get_type ())))))
);
10889 _tmp33_ = _tmp32_;
10890 _tmp28_ = !_tmp33_;
10891 } else {
10892 _tmp28_ = FALSE(0);
10893 }
10894 if (_tmp28_) {
10895 gchar* length_ctype = NULL((void*)0);
10896 gchar* _tmp34_;
10897 _tmp34_ = bala_get_ccode_array_length_type ((BalaCodeNode*) param);
10898 length_ctype = _tmp34_;
10899 {
10900 gint dim = 0;
10901 dim = 1;
10902 {
10903 gboolean _tmp35_ = FALSE(0);
10904 _tmp35_ = TRUE(!(0));
10905 while (TRUE(!(0))) {
10906 BalaArrayType* _tmp37_;
10907 gint _tmp38_;
10908 gint _tmp39_;
10909 const gchar* _tmp40_;
10910 gchar* _tmp41_;
10911 gchar* _tmp42_;
10912 if (!_tmp35_) {
10913 gint _tmp36_;
10914 _tmp36_ = dim;
10915 dim = _tmp36_ + 1;
10916 }
10917 _tmp35_ = FALSE(0);
10918 _tmp37_ = array_type;
10919 _tmp38_ = bala_array_type_get_rank (_tmp37_);
10920 _tmp39_ = _tmp38_;
10921 if (!(dim <= _tmp39_)) {
10922 break;
10923 }
10924 _tmp40_ = length_ctype;
10925 _tmp41_ = bala_ccode_base_module_get_variable_array_length_cname (self, (BalaVariable*) param, dim);
10926 _tmp42_ = _tmp41_;
10927 bala_ccode_struct_add_field (data, _tmp40_, _tmp42_, 0, NULL((void*)0));
10928 _g_free0 (_tmp42_)(_tmp42_ = (g_free (_tmp42_), ((void*)0)));
10929 }
10930 }
10931 }
10932 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
10933 } else {
10934 gboolean _tmp43_ = FALSE(0);
10935 BalaDelegateType* _tmp44_;
10936 _tmp44_ = deleg_type;
10937 if (_tmp44_ != NULL((void*)0)) {
10938 BalaDelegateType* _tmp45_;
10939 BalaDelegate* _tmp46_;
10940 BalaDelegate* _tmp47_;
10941 gboolean _tmp48_;
10942 gboolean _tmp49_;
10943 _tmp45_ = deleg_type;
10944 _tmp46_ = bala_delegate_type_get_delegate_symbol (_tmp45_);
10945 _tmp47_ = _tmp46_;
10946 _tmp48_ = bala_delegate_get_has_target (_tmp47_);
10947 _tmp49_ = _tmp48_;
10948 _tmp43_ = _tmp49_;
10949 } else {
10950 _tmp43_ = FALSE(0);
10951 }
10952 if (_tmp43_) {
10953 BalaDataType* _tmp50_;
10954 gchar* _tmp51_;
10955 gchar* _tmp52_;
10956 gchar* _tmp53_;
10957 gchar* _tmp54_;
10958 BalaDataType* _tmp55_;
10959 BalaDataType* _tmp56_;
10960 _tmp50_ = self->delegate_target_type;
10961 _tmp51_ = bala_get_ccode_name ((BalaCodeNode*) _tmp50_);
10962 _tmp52_ = _tmp51_;
10963 _tmp53_ = bala_get_ccode_delegate_target_name ((BalaVariable*) param);
10964 _tmp54_ = _tmp53_;
10965 bala_ccode_struct_add_field (data, _tmp52_, _tmp54_, 0, NULL((void*)0));
10966 _g_free0 (_tmp54_)(_tmp54_ = (g_free (_tmp54_), ((void*)0)));
10967 _g_free0 (_tmp52_)(_tmp52_ = (g_free (_tmp52_), ((void*)0)));
10968 _tmp55_ = bala_variable_get_variable_type ((BalaVariable*) param);
10969 _tmp56_ = _tmp55_;
10970 if (bala_data_type_is_disposable (_tmp56_)) {
10971 BalaDelegateType* _tmp57_;
10972 gchar* _tmp58_;
10973 gchar* _tmp59_;
10974 gchar* _tmp60_;
10975 gchar* _tmp61_;
10976 BalaTargetValue* lvalue = NULL((void*)0);
10977 BalaTargetValue* _tmp62_;
10978 BalaTargetValue* _tmp63_;
10979 BalaTargetValue* _tmp64_;
10980 BalaCCodeExpression* _tmp65_;
10981 _tmp57_ = self->delegate_target_destroy_type;
10982 _tmp58_ = bala_get_ccode_name ((BalaCodeNode*) _tmp57_);
10983 _tmp59_ = _tmp58_;
10984 _tmp60_ = bala_get_ccode_delegate_target_destroy_notify_name ((BalaVariable*) param);
10985 _tmp61_ = _tmp60_;
10986 bala_ccode_struct_add_field (data, _tmp59_, _tmp61_, 0, NULL((void*)0));
10987 _g_free0 (_tmp61_)(_tmp61_ = (g_free (_tmp61_), ((void*)0)));
10988 _g_free0 (_tmp59_)(_tmp59_ = (g_free (_tmp59_), ((void*)0)));
10989 _tmp62_ = bala_ccode_base_module_get_parameter_cvalue (self, param);
10990 lvalue = _tmp62_;
10991 _tmp63_ = value;
10992 _tmp64_ = lvalue;
10993 _tmp65_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp64_);
10994 _bala_ccode_node_unref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)->delegate_target_destroy_notify_cvalue)(((((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp63_), ((bala_glib_value_get_type ())))))->delegate_target_destroy_notify_cvalue
== ((void*)0)) ? ((void*)0) : ((((BalaGLibValue*) g_type_check_instance_cast
((GTypeInstance*) (_tmp63_), ((bala_glib_value_get_type ()))
)))->delegate_target_destroy_notify_cvalue = (bala_ccode_node_unref
((((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp63_), ((bala_glib_value_get_type ())))))->delegate_target_destroy_notify_cvalue
), ((void*)0))))
;
10995 G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp63_), ((bala_glib_value_get_type ())))))
->delegate_target_destroy_notify_cvalue = _tmp65_;
10996 _bala_target_value_unref0 (lvalue)((lvalue == ((void*)0)) ? ((void*)0) : (lvalue = (bala_target_value_unref
(lvalue), ((void*)0))))
;
10997 }
10998 }
10999 }
11000 bala_parameter_set_captured (param, TRUE(!(0)));
11001 _tmp66_ = value;
11002 bala_code_generator_store_parameter ((BalaCodeGenerator*) self, param, _tmp66_, TRUE(!(0)), NULL((void*)0));
11003 _bala_code_node_unref0 (deleg_type)((deleg_type == ((void*)0)) ? ((void*)0) : (deleg_type = (bala_code_node_unref
(deleg_type), ((void*)0))))
;
11004 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
11005 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
11006 _bala_code_node_unref0 (param_type)((param_type == ((void*)0)) ? ((void*)0) : (param_type = (bala_code_node_unref
(param_type), ((void*)0))))
;
11007}
11008
11009static void
11010bala_ccode_base_module_real_visit_block (BalaCodeVisitor* base,
11011 BalaBlock* b)
11012{
11013 BalaCCodeBaseModule * self;
11014 BalaCCodeBaseModuleEmitContext* _tmp0_;
11015 BalaList* local_vars = NULL((void*)0);
11016 BalaList* _tmp1_;
11017 BalaList* _tmp2_;
11018 gboolean _tmp3_ = FALSE(0);
11019 gboolean _tmp4_ = FALSE(0);
11020 BalaCodeNode* _tmp5_;
11021 BalaCodeNode* _tmp6_;
11022 gboolean _tmp13_ = FALSE(0);
11023 BalaCodeNode* _tmp14_;
11024 BalaCodeNode* _tmp15_;
11025 gboolean _tmp59_;
11026 gboolean _tmp60_;
11027 gboolean reachable_exit_block = FALSE(0);
11028 gboolean _tmp1011_ = FALSE(0);
11029 gboolean _tmp1012_ = FALSE(0);
11030 BalaCodeNode* _tmp1013_;
11031 BalaCodeNode* _tmp1014_;
11032 BalaCCodeBaseModuleEmitContext* _tmp1021_;
11033 self = (BalaCCodeBaseModule*) base;
11034 g_return_if_fail (b != NULL)do { if ((b != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "b != NULL"); return
; } } while (0)
;
11035 _tmp0_ = self->emit_context;
11036 bala_ccode_base_module_emit_context_push_symbol (_tmp0_, (BalaSymbol*) b);
11037 _tmp1_ = bala_block_get_local_variables (b);
11038 _tmp2_ = _bala_iterable_ref0 (_tmp1_);
11039 local_vars = _tmp2_;
11040 _tmp5_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
11041 _tmp6_ = _tmp5_;
11042 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp6_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
11043 _tmp4_ = TRUE(!(0));
11044 } else {
11045 BalaCodeNode* _tmp7_;
11046 BalaCodeNode* _tmp8_;
11047 _tmp7_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
11048 _tmp8_ = _tmp7_;
11049 _tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_SWITCH_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_switch_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
11050 }
11051 if (_tmp4_) {
11052 _tmp3_ = TRUE(!(0));
11053 } else {
11054 BalaCodeNode* _tmp9_;
11055 BalaCodeNode* _tmp10_;
11056 _tmp9_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
11057 _tmp10_ = _tmp9_;
11058 _tmp3_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, BALA_TYPE_TRY_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp10_); GType __t = ((bala_try_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
11059 }
11060 if (_tmp3_) {
11061 BalaCCodeFunction* _tmp11_;
11062 BalaCCodeFunction* _tmp12_;
11063 _tmp11_ = bala_ccode_base_module_get_ccode (self);
11064 _tmp12_ = _tmp11_;
11065 bala_ccode_function_open_block (_tmp12_);
11066 }
11067 _tmp14_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
11068 _tmp15_ = _tmp14_;
11069 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, BALA_TYPE_TRY_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp15_); GType __t = ((bala_try_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
11070 BalaCodeNode* _tmp16_;
11071 BalaCodeNode* _tmp17_;
11072 BalaBlock* _tmp18_;
11073 BalaBlock* _tmp19_;
11074 _tmp16_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
11075 _tmp17_ = _tmp16_;
11076 _tmp18_ = bala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, BALA_TYPE_TRY_STATEMENT, BalaTryStatement)(((BalaTryStatement*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp17_), ((bala_try_statement_get_type ())))))
);
11077 _tmp19_ = _tmp18_;
11078 _tmp13_ = b == _tmp19_;
11079 } else {
11080 _tmp13_ = FALSE(0);
11081 }
11082 if (_tmp13_) {
11083 BalaCodeNode* _tmp20_;
11084 BalaCodeNode* _tmp21_;
11085 BalaBlock* _tmp22_;
11086 BalaBlock* _tmp23_;
11087 gboolean _tmp24_;
11088 gboolean _tmp25_;
11089 _tmp20_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
11090 _tmp21_ = _tmp20_;
11091 _tmp22_ = bala_try_statement_get_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, BALA_TYPE_TRY_STATEMENT, BalaTryStatement)(((BalaTryStatement*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp21_), ((bala_try_statement_get_type ())))))
);
11092 _tmp23_ = _tmp22_;
11093 _tmp24_ = bala_code_node_get_tree_can_fail ((BalaCodeNode*) _tmp23_);
11094 _tmp25_ = _tmp24_;
11095 if (_tmp25_) {
11096 if (bala_ccode_base_module_is_in_coroutine (self)) {
11097 gboolean _tmp26_ = FALSE(0);
11098 gint _tmp27_;
11099 gint _tmp28_;
11100 _tmp27_ = bala_ccode_base_module_get_current_inner_error_id (self);
11101 _tmp28_ = _tmp27_;
11102 if (_tmp28_ > 0) {
11103 gboolean _tmp29_ = FALSE(0);
11104 BalaMap* _tmp30_;
11105 BalaMethod* _tmp31_;
11106 BalaMethod* _tmp32_;
11107 _tmp30_ = self->priv->method_inner_error_var_count;
11108 _tmp31_ = bala_ccode_base_module_get_current_method (self);
11109 _tmp32_ = _tmp31_;
11110 if (!bala_map_contains (_tmp30_, _tmp32_)) {
11111 _tmp29_ = TRUE(!(0));
11112 } else {
11113 BalaMap* _tmp33_;
11114 BalaMethod* _tmp34_;
11115 BalaMethod* _tmp35_;
11116 gpointer _tmp36_;
11117 gint _tmp37_;
11118 gint _tmp38_;
11119 _tmp33_ = self->priv->method_inner_error_var_count;
11120 _tmp34_ = bala_ccode_base_module_get_current_method (self);
11121 _tmp35_ = _tmp34_;
11122 _tmp36_ = bala_map_get (_tmp33_, _tmp35_);
11123 _tmp37_ = bala_ccode_base_module_get_current_inner_error_id (self);
11124 _tmp38_ = _tmp37_;
11125 _tmp29_ = ((gint) ((gintptr) _tmp36_)) < _tmp38_;
11126 }
11127 _tmp26_ = _tmp29_;
11128 } else {
11129 _tmp26_ = FALSE(0);
11130 }
11131 if (_tmp26_) {
11132 BalaCCodeStruct* _tmp39_;
11133 gint _tmp40_;
11134 gint _tmp41_;
11135 gchar* _tmp42_;
11136 gchar* _tmp43_;
11137 BalaMap* _tmp44_;
11138 BalaMethod* _tmp45_;
11139 BalaMethod* _tmp46_;
11140 gint _tmp47_;
11141 gint _tmp48_;
11142 _tmp39_ = self->closure_struct;
11143 _tmp40_ = bala_ccode_base_module_get_current_inner_error_id (self);
11144 _tmp41_ = _tmp40_;
11145 _tmp42_ = g_strdup_printf ("_inner_error%d_", _tmp41_);
11146 _tmp43_ = _tmp42_;
11147 bala_ccode_struct_add_field (_tmp39_, "GError*", _tmp43_, 0, NULL((void*)0));
11148 _g_free0 (_tmp43_)(_tmp43_ = (g_free (_tmp43_), ((void*)0)));
11149 _tmp44_ = self->priv->method_inner_error_var_count;
11150 _tmp45_ = bala_ccode_base_module_get_current_method (self);
11151 _tmp46_ = _tmp45_;
11152 _tmp47_ = bala_ccode_base_module_get_current_inner_error_id (self);
11153 _tmp48_ = _tmp47_;
11154 bala_map_set (_tmp44_, _tmp46_, (gpointer) ((gintptr) _tmp48_));
11155 }
11156 } else {
11157 BalaCCodeFunction* _tmp49_;
11158 BalaCCodeFunction* _tmp50_;
11159 gint _tmp51_;
11160 gint _tmp52_;
11161 gchar* _tmp53_;
11162 gchar* _tmp54_;
11163 BalaCCodeConstant* _tmp55_;
11164 BalaCCodeConstant* _tmp56_;
11165 BalaCCodeVariableDeclarator* _tmp57_;
11166 BalaCCodeVariableDeclarator* _tmp58_;
11167 _tmp49_ = bala_ccode_base_module_get_ccode (self);
11168 _tmp50_ = _tmp49_;
11169 _tmp51_ = bala_ccode_base_module_get_current_inner_error_id (self);
11170 _tmp52_ = _tmp51_;
11171 _tmp53_ = g_strdup_printf ("_inner_error%d_", _tmp52_);
11172 _tmp54_ = _tmp53_;
11173 _tmp55_ = bala_ccode_constant_new ("NULL");
11174 _tmp56_ = _tmp55_;
11175 _tmp57_ = bala_ccode_variable_declarator_new_zero (_tmp54_, (BalaCCodeExpression*) _tmp56_, NULL((void*)0));
11176 _tmp58_ = _tmp57_;
11177 bala_ccode_function_add_declaration (_tmp50_, "GError*", (BalaCCodeDeclarator*) _tmp58_, 0);
11178 _bala_ccode_node_unref0 (_tmp58_)((_tmp58_ == ((void*)0)) ? ((void*)0) : (_tmp58_ = (bala_ccode_node_unref
(_tmp58_), ((void*)0))))
;
11179 _bala_ccode_node_unref0 (_tmp56_)((_tmp56_ == ((void*)0)) ? ((void*)0) : (_tmp56_ = (bala_ccode_node_unref
(_tmp56_), ((void*)0))))
;
11180 _g_free0 (_tmp54_)(_tmp54_ = (g_free (_tmp54_), ((void*)0)));
11181 }
11182 }
11183 }
11184 _tmp59_ = bala_block_get_captured (b);
11185 _tmp60_ = _tmp59_;
11186 if (_tmp60_) {
11187 BalaBlock* parent_block = NULL((void*)0);
11188 BalaSymbol* _tmp61_;
11189 BalaSymbol* _tmp62_;
11190 BalaBlock* _tmp63_;
11191 BalaBlock* _tmp64_;
11192 gint block_id = 0;
11193 gchar* struct_name = NULL((void*)0);
11194 gchar* _tmp65_;
11195 BalaCCodeStruct* data = NULL((void*)0);
11196 const gchar* _tmp66_;
11197 gchar* _tmp67_;
11198 gchar* _tmp68_;
11199 BalaCCodeStruct* _tmp69_;
11200 BalaCCodeStruct* _tmp70_;
11201 BalaCCodeStruct* _tmp71_;
11202 BalaBlock* _tmp72_;
11203 BalaCCodeFunctionCall* data_alloc = NULL((void*)0);
11204 BalaCCodeIdentifier* _tmp237_;
11205 BalaCCodeIdentifier* _tmp238_;
11206 BalaCCodeFunctionCall* _tmp239_;
11207 BalaCCodeFunctionCall* _tmp240_;
11208 BalaCCodeFunctionCall* _tmp241_;
11209 const gchar* _tmp242_;
11210 BalaCCodeIdentifier* _tmp243_;
11211 BalaCCodeIdentifier* _tmp244_;
11212 BalaCCodeFunction* _tmp260_;
11213 BalaCCodeFunction* _tmp261_;
11214 gchar* _tmp262_;
11215 gchar* _tmp263_;
11216 BalaCCodeExpression* _tmp264_;
11217 BalaCCodeExpression* _tmp265_;
11218 BalaCCodeFunctionCall* _tmp266_;
11219 BalaCCodeFunction* _tmp267_;
11220 BalaCCodeFunction* _tmp268_;
11221 gchar* _tmp269_;
11222 gchar* _tmp270_;
11223 BalaCCodeExpression* _tmp271_;
11224 BalaCCodeExpression* _tmp272_;
11225 BalaCCodeMemberAccess* _tmp273_;
11226 BalaCCodeMemberAccess* _tmp274_;
11227 BalaCCodeIdentifier* _tmp275_;
11228 BalaCCodeIdentifier* _tmp276_;
11229 BalaBlock* _tmp277_;
11230 BalaSymbol* _tmp382_;
11231 BalaSymbol* _tmp383_;
11232 BalaCCodeTypeDefinition* _typedef_ = NULL((void*)0);
11233 const gchar* _tmp490_;
11234 gchar* _tmp491_;
11235 gchar* _tmp492_;
11236 const gchar* _tmp493_;
11237 BalaCCodeVariableDeclarator* _tmp494_;
11238 BalaCCodeVariableDeclarator* _tmp495_;
11239 BalaCCodeTypeDefinition* _tmp496_;
11240 BalaCCodeTypeDefinition* _tmp497_;
11241 BalaCCodeFile* _tmp498_;
11242 BalaCCodeTypeDefinition* _tmp499_;
11243 BalaCCodeFile* _tmp500_;
11244 BalaCCodeStruct* _tmp501_;
11245 BalaCCodeFunction* ref_fun = NULL((void*)0);
11246 gchar* _tmp502_;
11247 gchar* _tmp503_;
11248 const gchar* _tmp504_;
11249 gchar* _tmp505_;
11250 gchar* _tmp506_;
11251 BalaCCodeFunction* _tmp507_;
11252 BalaCCodeFunction* _tmp508_;
11253 BalaCCodeFunction* _tmp509_;
11254 gchar* _tmp510_;
11255 gchar* _tmp511_;
11256 const gchar* _tmp512_;
11257 gchar* _tmp513_;
11258 gchar* _tmp514_;
11259 BalaCCodeParameter* _tmp515_;
11260 BalaCCodeParameter* _tmp516_;
11261 BalaCCodeFunction* _tmp517_;
11262 BalaCCodeFunction* _tmp518_;
11263 BalaCCodeFunctionCall* ccall = NULL((void*)0);
11264 BalaCCodeIdentifier* _tmp519_;
11265 BalaCCodeIdentifier* _tmp520_;
11266 BalaCCodeFunctionCall* _tmp521_;
11267 BalaCCodeFunctionCall* _tmp522_;
11268 BalaCCodeFunctionCall* _tmp523_;
11269 gchar* _tmp524_;
11270 gchar* _tmp525_;
11271 BalaCCodeIdentifier* _tmp526_;
11272 BalaCCodeIdentifier* _tmp527_;
11273 BalaCCodeMemberAccess* _tmp528_;
11274 BalaCCodeMemberAccess* _tmp529_;
11275 BalaCCodeUnaryExpression* _tmp530_;
11276 BalaCCodeUnaryExpression* _tmp531_;
11277 BalaCCodeFunction* _tmp532_;
11278 BalaCCodeFunction* _tmp533_;
11279 BalaCCodeFunctionCall* _tmp534_;
11280 BalaCCodeFunction* _tmp535_;
11281 BalaCCodeFunction* _tmp536_;
11282 gchar* _tmp537_;
11283 gchar* _tmp538_;
11284 BalaCCodeIdentifier* _tmp539_;
11285 BalaCCodeIdentifier* _tmp540_;
11286 BalaCCodeFile* _tmp541_;
11287 BalaCCodeFunction* _tmp542_;
11288 BalaCCodeFile* _tmp543_;
11289 BalaCCodeFunction* _tmp544_;
11290 BalaCCodeFunction* unref_fun = NULL((void*)0);
11291 gchar* _tmp545_;
11292 gchar* _tmp546_;
11293 BalaCCodeFunction* _tmp547_;
11294 BalaCCodeFunction* _tmp548_;
11295 BalaCCodeFunction* _tmp549_;
11296 BalaCCodeParameter* _tmp550_;
11297 BalaCCodeParameter* _tmp551_;
11298 BalaCCodeFunction* _tmp552_;
11299 BalaCCodeFunction* _tmp553_;
11300 BalaCCodeFunction* _tmp554_;
11301 BalaCCodeFunction* _tmp555_;
11302 const gchar* _tmp556_;
11303 gchar* _tmp557_;
11304 gchar* _tmp558_;
11305 gchar* _tmp559_;
11306 gchar* _tmp560_;
11307 BalaCCodeIdentifier* _tmp561_;
11308 BalaCCodeIdentifier* _tmp562_;
11309 const gchar* _tmp563_;
11310 gchar* _tmp564_;
11311 gchar* _tmp565_;
11312 BalaCCodeCastExpression* _tmp566_;
11313 BalaCCodeCastExpression* _tmp567_;
11314 BalaCCodeVariableDeclarator* _tmp568_;
11315 BalaCCodeVariableDeclarator* _tmp569_;
11316 BalaCCodeIdentifier* _tmp570_;
11317 BalaCCodeIdentifier* _tmp571_;
11318 BalaCCodeFunctionCall* _tmp572_;
11319 BalaCCodeFunctionCall* _tmp573_;
11320 gchar* _tmp574_;
11321 gchar* _tmp575_;
11322 BalaCCodeIdentifier* _tmp576_;
11323 BalaCCodeIdentifier* _tmp577_;
11324 BalaCCodeMemberAccess* _tmp578_;
11325 BalaCCodeMemberAccess* _tmp579_;
11326 BalaCCodeUnaryExpression* _tmp580_;
11327 BalaCCodeUnaryExpression* _tmp581_;
11328 BalaCCodeFunction* _tmp582_;
11329 BalaCCodeFunction* _tmp583_;
11330 BalaCCodeFunctionCall* _tmp584_;
11331 BalaCCodeExpression* outer_block = NULL((void*)0);
11332 gchar* _tmp585_;
11333 gchar* _tmp586_;
11334 BalaCCodeIdentifier* _tmp587_;
11335 BalaCCodeExpression* _tmp588_;
11336 BalaBlock* parent_closure_block = NULL((void*)0);
11337 BalaDataType* this_type = NULL((void*)0);
11338 BalaDataType* _tmp599_;
11339 BalaDataType* _tmp600_;
11340 BalaDataType* _tmp601_;
11341 BalaMethod* _tmp616_;
11342 BalaMethod* _tmp617_;
11343 BalaSymbol* _tmp717_;
11344 BalaSymbol* _tmp718_;
11345 BalaBlock* _tmp789_;
11346 BalaCCodeFunctionCall* data_free = NULL((void*)0);
11347 BalaCCodeIdentifier* _tmp839_;
11348 BalaCCodeIdentifier* _tmp840_;
11349 BalaCCodeFunctionCall* _tmp841_;
11350 BalaCCodeFunctionCall* _tmp842_;
11351 BalaCCodeFunctionCall* _tmp843_;
11352 const gchar* _tmp844_;
11353 BalaCCodeIdentifier* _tmp845_;
11354 BalaCCodeIdentifier* _tmp846_;
11355 BalaCCodeFunctionCall* _tmp847_;
11356 gchar* _tmp848_;
11357 gchar* _tmp849_;
11358 BalaCCodeIdentifier* _tmp850_;
11359 BalaCCodeIdentifier* _tmp851_;
11360 BalaCCodeFunction* _tmp852_;
11361 BalaCCodeFunction* _tmp853_;
11362 BalaCCodeFunctionCall* _tmp854_;
11363 BalaCCodeFunction* _tmp855_;
11364 BalaCCodeFunction* _tmp856_;
11365 BalaCCodeFile* _tmp857_;
11366 BalaCCodeFunction* _tmp858_;
11367 BalaCCodeFile* _tmp859_;
11368 BalaCCodeFunction* _tmp860_;
11369 _tmp61_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
11370 _tmp62_ = _tmp61_;
11371 _tmp63_ = bala_ccode_base_module_next_closure_block (self, _tmp62_);
11372 _tmp64_ = _bala_code_node_ref0 (_tmp63_);
11373 parent_block = _tmp64_;
11374 block_id = bala_ccode_base_module_get_block_id (self, b);
11375 _tmp65_ = g_strdup_printf ("Block%dData", block_id);
11376 struct_name = _tmp65_;
11377 _tmp66_ = struct_name;
11378 _tmp67_ = g_strconcat ("_", _tmp66_, NULL((void*)0));
11379 _tmp68_ = _tmp67_;
11380 _tmp69_ = bala_ccode_struct_new (_tmp68_);
11381 _tmp70_ = _tmp69_;
11382 _g_free0 (_tmp68_)(_tmp68_ = (g_free (_tmp68_), ((void*)0)));
11383 data = _tmp70_;
11384 _tmp71_ = data;
11385 bala_ccode_struct_add_field (_tmp71_, "int", "_ref_count_", 0, NULL((void*)0));
11386 _tmp72_ = parent_block;
11387 if (_tmp72_ != NULL((void*)0)) {
11388 gint parent_block_id = 0;
11389 BalaBlock* _tmp73_;
11390 BalaCCodeStruct* _tmp74_;
11391 gchar* _tmp75_;
11392 gchar* _tmp76_;
11393 gchar* _tmp77_;
11394 gchar* _tmp78_;
11395 _tmp73_ = parent_block;
11396 parent_block_id = bala_ccode_base_module_get_block_id (self, _tmp73_);
11397 _tmp74_ = data;
11398 _tmp75_ = g_strdup_printf ("Block%dData *", parent_block_id);
11399 _tmp76_ = _tmp75_;
11400 _tmp77_ = g_strdup_printf ("_data%d_", parent_block_id);
11401 _tmp78_ = _tmp77_;
11402 bala_ccode_struct_add_field (_tmp74_, _tmp76_, _tmp78_, 0, NULL((void*)0));
11403 _g_free0 (_tmp78_)(_tmp78_ = (g_free (_tmp78_), ((void*)0)));
11404 _g_free0 (_tmp76_)(_tmp76_ = (g_free (_tmp76_), ((void*)0)));
11405 } else {
11406 BalaDataType* this_type = NULL((void*)0);
11407 BalaDataType* _tmp79_;
11408 BalaDataType* _tmp80_;
11409 BalaMethod* _tmp85_;
11410 BalaMethod* _tmp86_;
11411 _tmp79_ = bala_ccode_base_module_get_this_type (self);
11412 this_type = _tmp79_;
11413 _tmp80_ = this_type;
11414 if (_tmp80_ != NULL((void*)0)) {
11415 BalaCCodeStruct* _tmp81_;
11416 BalaDataType* _tmp82_;
11417 gchar* _tmp83_;
11418 gchar* _tmp84_;
11419 _tmp81_ = data;
11420 _tmp82_ = this_type;
11421 _tmp83_ = bala_get_ccode_name ((BalaCodeNode*) _tmp82_);
11422 _tmp84_ = _tmp83_;
11423 bala_ccode_struct_add_field (_tmp81_, _tmp84_, "self", 0, NULL((void*)0));
11424 _g_free0 (_tmp84_)(_tmp84_ = (g_free (_tmp84_), ((void*)0)));
11425 }
11426 _tmp85_ = bala_ccode_base_module_get_current_method (self);
11427 _tmp86_ = _tmp85_;
11428 if (_tmp86_ != NULL((void*)0)) {
11429 {
11430 BalaList* _type_param_list = NULL((void*)0);
11431 BalaMethod* _tmp87_;
11432 BalaMethod* _tmp88_;
11433 BalaList* _tmp89_;
11434 BalaList* _tmp90_;
11435 gint _type_param_size = 0;
11436 BalaList* _tmp91_;
11437 gint _tmp92_;
11438 gint _tmp93_;
11439 gint _type_param_index = 0;
11440 _tmp87_ = bala_ccode_base_module_get_current_method (self);
11441 _tmp88_ = _tmp87_;
11442 _tmp89_ = bala_method_get_type_parameters (_tmp88_);
11443 _tmp90_ = _bala_iterable_ref0 (_tmp89_);
11444 _type_param_list = _tmp90_;
11445 _tmp91_ = _type_param_list;
11446 _tmp92_ = bala_collection_get_size ((BalaCollection*) _tmp91_);
11447 _tmp93_ = _tmp92_;
11448 _type_param_size = _tmp93_;
11449 _type_param_index = -1;
11450 while (TRUE(!(0))) {
11451 gint _tmp94_;
11452 gint _tmp95_;
11453 BalaTypeParameter* type_param = NULL((void*)0);
11454 BalaList* _tmp96_;
11455 gpointer _tmp97_;
11456 gchar* func_name = NULL((void*)0);
11457 BalaTypeParameter* _tmp98_;
11458 const gchar* _tmp99_;
11459 const gchar* _tmp100_;
11460 gchar* _tmp101_;
11461 gchar* _tmp102_;
11462 gchar* _tmp103_;
11463 BalaCCodeStruct* _tmp104_;
11464 const gchar* _tmp105_;
11465 BalaTypeParameter* _tmp106_;
11466 const gchar* _tmp107_;
11467 const gchar* _tmp108_;
11468 gchar* _tmp109_;
11469 gchar* _tmp110_;
11470 gchar* _tmp111_;
11471 BalaCCodeStruct* _tmp112_;
11472 const gchar* _tmp113_;
11473 BalaTypeParameter* _tmp114_;
11474 const gchar* _tmp115_;
11475 const gchar* _tmp116_;
11476 gchar* _tmp117_;
11477 gchar* _tmp118_;
11478 gchar* _tmp119_;
11479 BalaCCodeStruct* _tmp120_;
11480 const gchar* _tmp121_;
11481 _type_param_index = _type_param_index + 1;
11482 _tmp94_ = _type_param_index;
11483 _tmp95_ = _type_param_size;
11484 if (!(_tmp94_ < _tmp95_)) {
11485 break;
11486 }
11487 _tmp96_ = _type_param_list;
11488 _tmp97_ = bala_list_get (_tmp96_, _type_param_index);
11489 type_param = (BalaTypeParameter*) _tmp97_;
11490 _tmp98_ = type_param;
11491 _tmp99_ = bala_symbol_get_name ((BalaSymbol*) _tmp98_);
11492 _tmp100_ = _tmp99_;
11493 _tmp101_ = g_ascii_strdown (_tmp100_, (gssize) -1);
11494 _tmp102_ = _tmp101_;
11495 _tmp103_ = g_strdup_printf ("%s_type", _tmp102_);
11496 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
11497 func_name = _tmp103_;
11498 _g_free0 (_tmp102_)(_tmp102_ = (g_free (_tmp102_), ((void*)0)));
11499 _tmp104_ = data;
11500 _tmp105_ = func_name;
11501 bala_ccode_struct_add_field (_tmp104_, "GType", _tmp105_, 0, NULL((void*)0));
11502 _tmp106_ = type_param;
11503 _tmp107_ = bala_symbol_get_name ((BalaSymbol*) _tmp106_);
11504 _tmp108_ = _tmp107_;
11505 _tmp109_ = g_ascii_strdown (_tmp108_, (gssize) -1);
11506 _tmp110_ = _tmp109_;
11507 _tmp111_ = g_strdup_printf ("%s_dup_func", _tmp110_);
11508 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
11509 func_name = _tmp111_;
11510 _g_free0 (_tmp110_)(_tmp110_ = (g_free (_tmp110_), ((void*)0)));
11511 _tmp112_ = data;
11512 _tmp113_ = func_name;
11513 bala_ccode_struct_add_field (_tmp112_, "GBoxedCopyFunc", _tmp113_, 0, NULL((void*)0));
11514 _tmp114_ = type_param;
11515 _tmp115_ = bala_symbol_get_name ((BalaSymbol*) _tmp114_);
11516 _tmp116_ = _tmp115_;
11517 _tmp117_ = g_ascii_strdown (_tmp116_, (gssize) -1);
11518 _tmp118_ = _tmp117_;
11519 _tmp119_ = g_strdup_printf ("%s_destroy_func", _tmp118_);
11520 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
11521 func_name = _tmp119_;
11522 _g_free0 (_tmp118_)(_tmp118_ = (g_free (_tmp118_), ((void*)0)));
11523 _tmp120_ = data;
11524 _tmp121_ = func_name;
11525 bala_ccode_struct_add_field (_tmp120_, "GDestroyNotify", _tmp121_, 0, NULL((void*)0));
11526 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
11527 _bala_code_node_unref0 (type_param)((type_param == ((void*)0)) ? ((void*)0) : (type_param = (bala_code_node_unref
(type_param), ((void*)0))))
;
11528 }
11529 _bala_iterable_unref0 (_type_param_list)((_type_param_list == ((void*)0)) ? ((void*)0) : (_type_param_list
= (bala_iterable_unref (_type_param_list), ((void*)0))))
;
11530 }
11531 }
11532 }
11533 {
11534 BalaList* _local_list = NULL((void*)0);
11535 BalaList* _tmp122_;
11536 BalaList* _tmp123_;
11537 gint _local_size = 0;
11538 BalaList* _tmp124_;
11539 gint _tmp125_;
11540 gint _tmp126_;
11541 gint _local_index = 0;
11542 _tmp122_ = local_vars;
11543 _tmp123_ = _bala_iterable_ref0 (_tmp122_);
11544 _local_list = _tmp123_;
11545 _tmp124_ = _local_list;
11546 _tmp125_ = bala_collection_get_size ((BalaCollection*) _tmp124_);
11547 _tmp126_ = _tmp125_;
11548 _local_size = _tmp126_;
11549 _local_index = -1;
11550 while (TRUE(!(0))) {
11551 gint _tmp127_;
11552 gint _tmp128_;
11553 BalaLocalVariable* local = NULL((void*)0);
11554 BalaList* _tmp129_;
11555 gpointer _tmp130_;
11556 BalaLocalVariable* _tmp131_;
11557 gboolean _tmp132_;
11558 gboolean _tmp133_;
11559 _local_index = _local_index + 1;
11560 _tmp127_ = _local_index;
11561 _tmp128_ = _local_size;
11562 if (!(_tmp127_ < _tmp128_)) {
11563 break;
11564 }
11565 _tmp129_ = _local_list;
11566 _tmp130_ = bala_list_get (_tmp129_, _local_index);
11567 local = (BalaLocalVariable*) _tmp130_;
11568 _tmp131_ = local;
11569 _tmp132_ = bala_local_variable_get_captured (_tmp131_);
11570 _tmp133_ = _tmp132_;
11571 if (_tmp133_) {
11572 BalaLocalVariable* _tmp134_;
11573 BalaDataType* _tmp135_;
11574 BalaDataType* _tmp136_;
11575 BalaCCodeFile* _tmp137_;
11576 BalaCCodeStruct* _tmp138_;
11577 BalaLocalVariable* _tmp139_;
11578 BalaDataType* _tmp140_;
11579 BalaDataType* _tmp141_;
11580 gchar* _tmp142_;
11581 gchar* _tmp143_;
11582 BalaLocalVariable* _tmp144_;
11583 gchar* _tmp145_;
11584 gchar* _tmp146_;
11585 BalaLocalVariable* _tmp147_;
11586 BalaDataType* _tmp148_;
11587 BalaDataType* _tmp149_;
11588 BalaCCodeDeclaratorSuffix* _tmp150_;
11589 BalaCCodeDeclaratorSuffix* _tmp151_;
11590 gboolean _tmp152_ = FALSE(0);
11591 BalaLocalVariable* _tmp153_;
11592 BalaDataType* _tmp154_;
11593 BalaDataType* _tmp155_;
11594 _tmp134_ = local;
11595 _tmp135_ = bala_variable_get_variable_type ((BalaVariable*) _tmp134_);
11596 _tmp136_ = _tmp135_;
11597 _tmp137_ = self->cfile;
11598 bala_ccode_base_module_generate_type_declaration (self, _tmp136_, _tmp137_);
11599 _tmp138_ = data;
11600 _tmp139_ = local;
11601 _tmp140_ = bala_variable_get_variable_type ((BalaVariable*) _tmp139_);
11602 _tmp141_ = _tmp140_;
11603 _tmp142_ = bala_get_ccode_name ((BalaCodeNode*) _tmp141_);
11604 _tmp143_ = _tmp142_;
11605 _tmp144_ = local;
11606 _tmp145_ = bala_ccode_base_module_get_local_cname (self, _tmp144_);
11607 _tmp146_ = _tmp145_;
11608 _tmp147_ = local;
11609 _tmp148_ = bala_variable_get_variable_type ((BalaVariable*) _tmp147_);
11610 _tmp149_ = _tmp148_;
11611 _tmp150_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp149_);
11612 _tmp151_ = _tmp150_;
11613 bala_ccode_struct_add_field (_tmp138_, _tmp143_, _tmp146_, 0, _tmp151_);
11614 _bala_ccode_declarator_suffix_unref0 (_tmp151_)((_tmp151_ == ((void*)0)) ? ((void*)0) : (_tmp151_ = (bala_ccode_declarator_suffix_unref
(_tmp151_), ((void*)0))))
;
11615 _g_free0 (_tmp146_)(_tmp146_ = (g_free (_tmp146_), ((void*)0)));
11616 _g_free0 (_tmp143_)(_tmp143_ = (g_free (_tmp143_), ((void*)0)));
11617 _tmp153_ = local;
11618 _tmp154_ = bala_variable_get_variable_type ((BalaVariable*) _tmp153_);
11619 _tmp155_ = _tmp154_;
11620 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp155_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp155_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
11621 BalaLocalVariable* _tmp156_;
11622 BalaDataType* _tmp157_;
11623 BalaDataType* _tmp158_;
11624 gboolean _tmp159_;
11625 gboolean _tmp160_;
11626 _tmp156_ = local;
11627 _tmp157_ = bala_variable_get_variable_type ((BalaVariable*) _tmp156_);
11628 _tmp158_ = _tmp157_;
11629 _tmp159_ = bala_array_type_get_fixed_length (G_TYPE_CHECK_INSTANCE_CAST (_tmp158_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp158_), ((bala_array_type_get_type ())))))
);
11630 _tmp160_ = _tmp159_;
11631 _tmp152_ = !_tmp160_;
11632 } else {
11633 _tmp152_ = FALSE(0);
11634 }
11635 if (_tmp152_) {
11636 BalaArrayType* array_type = NULL((void*)0);
11637 BalaLocalVariable* _tmp161_;
11638 BalaDataType* _tmp162_;
11639 BalaDataType* _tmp163_;
11640 BalaArrayType* _tmp164_;
11641 gchar* length_ctype = NULL((void*)0);
11642 BalaArrayType* _tmp165_;
11643 gchar* _tmp166_;
11644 BalaCCodeStruct* _tmp179_;
11645 const gchar* _tmp180_;
11646 BalaLocalVariable* _tmp181_;
11647 gchar* _tmp182_;
11648 gchar* _tmp183_;
11649 gchar* _tmp184_;
11650 gchar* _tmp185_;
11651 _tmp161_ = local;
11652 _tmp162_ = bala_variable_get_variable_type ((BalaVariable*) _tmp161_);
11653 _tmp163_ = _tmp162_;
11654 _tmp164_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp163_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp163_), ((bala_array_type_get_type ())))))
);
11655 array_type = _tmp164_;
11656 _tmp165_ = array_type;
11657 _tmp166_ = bala_get_ccode_array_length_type ((BalaCodeNode*) _tmp165_);
11658 length_ctype = _tmp166_;
11659 {
11660 gint dim = 0;
11661 dim = 1;
11662 {
11663 gboolean _tmp167_ = FALSE(0);
11664 _tmp167_ = TRUE(!(0));
11665 while (TRUE(!(0))) {
11666 BalaArrayType* _tmp169_;
11667 gint _tmp170_;
11668 gint _tmp171_;
11669 BalaCCodeStruct* _tmp172_;
11670 const gchar* _tmp173_;
11671 BalaLocalVariable* _tmp174_;
11672 gchar* _tmp175_;
11673 gchar* _tmp176_;
11674 gchar* _tmp177_;
11675 gchar* _tmp178_;
11676 if (!_tmp167_) {
11677 gint _tmp168_;
11678 _tmp168_ = dim;
11679 dim = _tmp168_ + 1;
11680 }
11681 _tmp167_ = FALSE(0);
11682 _tmp169_ = array_type;
11683 _tmp170_ = bala_array_type_get_rank (_tmp169_);
11684 _tmp171_ = _tmp170_;
11685 if (!(dim <= _tmp171_)) {
11686 break;
11687 }
11688 _tmp172_ = data;
11689 _tmp173_ = length_ctype;
11690 _tmp174_ = local;
11691 _tmp175_ = bala_ccode_base_module_get_local_cname (self, _tmp174_);
11692 _tmp176_ = _tmp175_;
11693 _tmp177_ = bala_ccode_base_module_get_array_length_cname (self, _tmp176_, dim);
11694 _tmp178_ = _tmp177_;
11695 bala_ccode_struct_add_field (_tmp172_, _tmp173_, _tmp178_, 0, NULL((void*)0));
11696 _g_free0 (_tmp178_)(_tmp178_ = (g_free (_tmp178_), ((void*)0)));
11697 _g_free0 (_tmp176_)(_tmp176_ = (g_free (_tmp176_), ((void*)0)));
11698 }
11699 }
11700 }
11701 _tmp179_ = data;
11702 _tmp180_ = length_ctype;
11703 _tmp181_ = local;
11704 _tmp182_ = bala_ccode_base_module_get_local_cname (self, _tmp181_);
11705 _tmp183_ = _tmp182_;
11706 _tmp184_ = bala_ccode_base_module_get_array_size_cname (self, _tmp183_);
11707 _tmp185_ = _tmp184_;
11708 bala_ccode_struct_add_field (_tmp179_, _tmp180_, _tmp185_, 0, NULL((void*)0));
11709 _g_free0 (_tmp185_)(_tmp185_ = (g_free (_tmp185_), ((void*)0)));
11710 _g_free0 (_tmp183_)(_tmp183_ = (g_free (_tmp183_), ((void*)0)));
11711 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
11712 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
11713 } else {
11714 gboolean _tmp186_ = FALSE(0);
11715 BalaLocalVariable* _tmp187_;
11716 BalaDataType* _tmp188_;
11717 BalaDataType* _tmp189_;
11718 _tmp187_ = local;
11719 _tmp188_ = bala_variable_get_variable_type ((BalaVariable*) _tmp187_);
11720 _tmp189_ = _tmp188_;
11721 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp189_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
11722 BalaLocalVariable* _tmp190_;
11723 BalaDataType* _tmp191_;
11724 BalaDataType* _tmp192_;
11725 BalaDelegate* _tmp193_;
11726 BalaDelegate* _tmp194_;
11727 gboolean _tmp195_;
11728 gboolean _tmp196_;
11729 _tmp190_ = local;
11730 _tmp191_ = bala_variable_get_variable_type ((BalaVariable*) _tmp190_);
11731 _tmp192_ = _tmp191_;
11732 _tmp193_ = bala_delegate_type_get_delegate_symbol (G_TYPE_CHECK_INSTANCE_CAST (_tmp192_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp192_), ((bala_delegate_type_get_type ())))))
);
11733 _tmp194_ = _tmp193_;
11734 _tmp195_ = bala_delegate_get_has_target (_tmp194_);
11735 _tmp196_ = _tmp195_;
11736 _tmp186_ = _tmp196_;
11737 } else {
11738 _tmp186_ = FALSE(0);
11739 }
11740 if (_tmp186_) {
11741 BalaCCodeStruct* _tmp197_;
11742 BalaDataType* _tmp198_;
11743 gchar* _tmp199_;
11744 gchar* _tmp200_;
11745 BalaLocalVariable* _tmp201_;
11746 gchar* _tmp202_;
11747 gchar* _tmp203_;
11748 gchar* _tmp204_;
11749 gchar* _tmp205_;
11750 BalaLocalVariable* _tmp206_;
11751 BalaDataType* _tmp207_;
11752 BalaDataType* _tmp208_;
11753 _tmp197_ = data;
11754 _tmp198_ = self->delegate_target_type;
11755 _tmp199_ = bala_get_ccode_name ((BalaCodeNode*) _tmp198_);
11756 _tmp200_ = _tmp199_;
11757 _tmp201_ = local;
11758 _tmp202_ = bala_ccode_base_module_get_local_cname (self, _tmp201_);
11759 _tmp203_ = _tmp202_;
11760 _tmp204_ = bala_ccode_base_module_get_delegate_target_cname (self, _tmp203_);
11761 _tmp205_ = _tmp204_;
11762 bala_ccode_struct_add_field (_tmp197_, _tmp200_, _tmp205_, 0, NULL((void*)0));
11763 _g_free0 (_tmp205_)(_tmp205_ = (g_free (_tmp205_), ((void*)0)));
11764 _g_free0 (_tmp203_)(_tmp203_ = (g_free (_tmp203_), ((void*)0)));
11765 _g_free0 (_tmp200_)(_tmp200_ = (g_free (_tmp200_), ((void*)0)));
11766 _tmp206_ = local;
11767 _tmp207_ = bala_variable_get_variable_type ((BalaVariable*) _tmp206_);
11768 _tmp208_ = _tmp207_;
11769 if (bala_data_type_is_disposable (_tmp208_)) {
11770 BalaCCodeStruct* _tmp209_;
11771 BalaDelegateType* _tmp210_;
11772 gchar* _tmp211_;
11773 gchar* _tmp212_;
11774 BalaLocalVariable* _tmp213_;
11775 gchar* _tmp214_;
11776 gchar* _tmp215_;
11777 gchar* _tmp216_;
11778 gchar* _tmp217_;
11779 _tmp209_ = data;
11780 _tmp210_ = self->delegate_target_destroy_type;
11781 _tmp211_ = bala_get_ccode_name ((BalaCodeNode*) _tmp210_);
11782 _tmp212_ = _tmp211_;
11783 _tmp213_ = local;
11784 _tmp214_ = bala_ccode_base_module_get_local_cname (self, _tmp213_);
11785 _tmp215_ = _tmp214_;
11786 _tmp216_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp215_);
11787 _tmp217_ = _tmp216_;
11788 bala_ccode_struct_add_field (_tmp209_, _tmp212_, _tmp217_, 0, NULL((void*)0));
11789 _g_free0 (_tmp217_)(_tmp217_ = (g_free (_tmp217_), ((void*)0)));
11790 _g_free0 (_tmp215_)(_tmp215_ = (g_free (_tmp215_), ((void*)0)));
11791 _g_free0 (_tmp212_)(_tmp212_ = (g_free (_tmp212_), ((void*)0)));
11792 }
11793 } else {
11794 BalaLocalVariable* _tmp218_;
11795 BalaDataType* _tmp219_;
11796 BalaDataType* _tmp220_;
11797 BalaTypeSymbol* _tmp221_;
11798 BalaTypeSymbol* _tmp222_;
11799 BalaCodeContext* _tmp223_;
11800 BalaSemanticAnalyzer* _tmp224_;
11801 BalaSemanticAnalyzer* _tmp225_;
11802 BalaDataType* _tmp226_;
11803 BalaTypeSymbol* _tmp227_;
11804 BalaTypeSymbol* _tmp228_;
11805 _tmp218_ = local;
11806 _tmp219_ = bala_variable_get_variable_type ((BalaVariable*) _tmp218_);
11807 _tmp220_ = _tmp219_;
11808 _tmp221_ = bala_data_type_get_type_symbol (_tmp220_);
11809 _tmp222_ = _tmp221_;
11810 _tmp223_ = self->priv->_context;
11811 _tmp224_ = bala_code_context_get_analyzer (_tmp223_);
11812 _tmp225_ = _tmp224_;
11813 _tmp226_ = _tmp225_->va_list_type;
11814 _tmp227_ = bala_data_type_get_type_symbol (_tmp226_);
11815 _tmp228_ = _tmp227_;
11816 if (_tmp222_ == _tmp228_) {
11817 BalaLocalVariable* _tmp229_;
11818 BalaSourceReference* _tmp230_;
11819 BalaSourceReference* _tmp231_;
11820 BalaLocalVariable* _tmp232_;
11821 gchar* _tmp233_;
11822 gchar* _tmp234_;
11823 gchar* _tmp235_;
11824 gchar* _tmp236_;
11825 _tmp229_ = local;
11826 _tmp230_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp229_);
11827 _tmp231_ = _tmp230_;
11828 _tmp232_ = local;
11829 _tmp233_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp232_);
11830 _tmp234_ = _tmp233_;
11831 _tmp235_ = g_strdup_printf ("internal: Capturing `va_list' variable `%s' is not allowed", _tmp234_);
11832 _tmp236_ = _tmp235_;
11833 bala_report_error (_tmp231_, _tmp236_);
11834 _g_free0 (_tmp236_)(_tmp236_ = (g_free (_tmp236_), ((void*)0)));
11835 _g_free0 (_tmp234_)(_tmp234_ = (g_free (_tmp234_), ((void*)0)));
11836 bala_code_node_set_error ((BalaCodeNode*) b, TRUE(!(0)));
11837 }
11838 }
11839 }
11840 }
11841 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
11842 }
11843 _bala_iterable_unref0 (_local_list)((_local_list == ((void*)0)) ? ((void*)0) : (_local_list = (bala_iterable_unref
(_local_list), ((void*)0))))
;
11844 }
11845 _tmp237_ = bala_ccode_identifier_new ("g_slice_new0");
11846 _tmp238_ = _tmp237_;
11847 _tmp239_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp238_);
11848 _tmp240_ = _tmp239_;
11849 _bala_ccode_node_unref0 (_tmp238_)((_tmp238_ == ((void*)0)) ? ((void*)0) : (_tmp238_ = (bala_ccode_node_unref
(_tmp238_), ((void*)0))))
;
11850 data_alloc = _tmp240_;
11851 _tmp241_ = data_alloc;
11852 _tmp242_ = struct_name;
11853 _tmp243_ = bala_ccode_identifier_new (_tmp242_);
11854 _tmp244_ = _tmp243_;
11855 bala_ccode_function_call_add_argument (_tmp241_, (BalaCCodeExpression*) _tmp244_);
11856 _bala_ccode_node_unref0 (_tmp244_)((_tmp244_ == ((void*)0)) ? ((void*)0) : (_tmp244_ = (bala_ccode_node_unref
(_tmp244_), ((void*)0))))
;
11857 if (bala_ccode_base_module_is_in_coroutine (self)) {
11858 BalaCCodeStruct* _tmp245_;
11859 const gchar* _tmp246_;
11860 gchar* _tmp247_;
11861 gchar* _tmp248_;
11862 gchar* _tmp249_;
11863 gchar* _tmp250_;
11864 _tmp245_ = self->closure_struct;
11865 _tmp246_ = struct_name;
11866 _tmp247_ = g_strconcat (_tmp246_, "*", NULL((void*)0));
11867 _tmp248_ = _tmp247_;
11868 _tmp249_ = g_strdup_printf ("_data%d_", block_id);
11869 _tmp250_ = _tmp249_;
11870 bala_ccode_struct_add_field (_tmp245_, _tmp248_, _tmp250_, 0, NULL((void*)0));
11871 _g_free0 (_tmp250_)(_tmp250_ = (g_free (_tmp250_), ((void*)0)));
11872 _g_free0 (_tmp248_)(_tmp248_ = (g_free (_tmp248_), ((void*)0)));
11873 } else {
11874 BalaCCodeFunction* _tmp251_;
11875 BalaCCodeFunction* _tmp252_;
11876 const gchar* _tmp253_;
11877 gchar* _tmp254_;
11878 gchar* _tmp255_;
11879 gchar* _tmp256_;
11880 gchar* _tmp257_;
11881 BalaCCodeVariableDeclarator* _tmp258_;
11882 BalaCCodeVariableDeclarator* _tmp259_;
11883 _tmp251_ = bala_ccode_base_module_get_ccode (self);
11884 _tmp252_ = _tmp251_;
11885 _tmp253_ = struct_name;
11886 _tmp254_ = g_strconcat (_tmp253_, "*", NULL((void*)0));
11887 _tmp255_ = _tmp254_;
11888 _tmp256_ = g_strdup_printf ("_data%d_", block_id);
11889 _tmp257_ = _tmp256_;
11890 _tmp258_ = bala_ccode_variable_declarator_new (_tmp257_, NULL((void*)0), NULL((void*)0));
11891 _tmp259_ = _tmp258_;
11892 bala_ccode_function_add_declaration (_tmp252_, _tmp255_, (BalaCCodeDeclarator*) _tmp259_, 0);
11893 _bala_ccode_node_unref0 (_tmp259_)((_tmp259_ == ((void*)0)) ? ((void*)0) : (_tmp259_ = (bala_ccode_node_unref
(_tmp259_), ((void*)0))))
;
11894 _g_free0 (_tmp257_)(_tmp257_ = (g_free (_tmp257_), ((void*)0)));
11895 _g_free0 (_tmp255_)(_tmp255_ = (g_free (_tmp255_), ((void*)0)));
11896 }
11897 _tmp260_ = bala_ccode_base_module_get_ccode (self);
11898 _tmp261_ = _tmp260_;
11899 _tmp262_ = g_strdup_printf ("_data%d_", block_id);
11900 _tmp263_ = _tmp262_;
11901 _tmp264_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp263_);
11902 _tmp265_ = _tmp264_;
11903 _tmp266_ = data_alloc;
11904 bala_ccode_function_add_assignment (_tmp261_, _tmp265_, (BalaCCodeExpression*) _tmp266_);
11905 _bala_ccode_node_unref0 (_tmp265_)((_tmp265_ == ((void*)0)) ? ((void*)0) : (_tmp265_ = (bala_ccode_node_unref
(_tmp265_), ((void*)0))))
;
11906 _g_free0 (_tmp263_)(_tmp263_ = (g_free (_tmp263_), ((void*)0)));
11907 _tmp267_ = bala_ccode_base_module_get_ccode (self);
11908 _tmp268_ = _tmp267_;
11909 _tmp269_ = g_strdup_printf ("_data%d_", block_id);
11910 _tmp270_ = _tmp269_;
11911 _tmp271_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp270_);
11912 _tmp272_ = _tmp271_;
11913 _tmp273_ = bala_ccode_member_access_new_pointer (_tmp272_, "_ref_count_");
11914 _tmp274_ = _tmp273_;
11915 _tmp275_ = bala_ccode_identifier_new ("1");
11916 _tmp276_ = _tmp275_;
11917 bala_ccode_function_add_assignment (_tmp268_, (BalaCCodeExpression*) _tmp274_, (BalaCCodeExpression*) _tmp276_);
11918 _bala_ccode_node_unref0 (_tmp276_)((_tmp276_ == ((void*)0)) ? ((void*)0) : (_tmp276_ = (bala_ccode_node_unref
(_tmp276_), ((void*)0))))
;
11919 _bala_ccode_node_unref0 (_tmp274_)((_tmp274_ == ((void*)0)) ? ((void*)0) : (_tmp274_ = (bala_ccode_node_unref
(_tmp274_), ((void*)0))))
;
11920 _bala_ccode_node_unref0 (_tmp272_)((_tmp272_ == ((void*)0)) ? ((void*)0) : (_tmp272_ = (bala_ccode_node_unref
(_tmp272_), ((void*)0))))
;
11921 _g_free0 (_tmp270_)(_tmp270_ = (g_free (_tmp270_), ((void*)0)));
11922 _tmp277_ = parent_block;
11923 if (_tmp277_ != NULL((void*)0)) {
11924 gint parent_block_id = 0;
11925 BalaBlock* _tmp278_;
11926 BalaCCodeFunctionCall* ref_call = NULL((void*)0);
11927 gchar* _tmp279_;
11928 gchar* _tmp280_;
11929 BalaCCodeIdentifier* _tmp281_;
11930 BalaCCodeIdentifier* _tmp282_;
11931 BalaCCodeFunctionCall* _tmp283_;
11932 BalaCCodeFunctionCall* _tmp284_;
11933 BalaCCodeFunctionCall* _tmp285_;
11934 gchar* _tmp286_;
11935 gchar* _tmp287_;
11936 BalaCCodeExpression* _tmp288_;
11937 BalaCCodeExpression* _tmp289_;
11938 BalaCCodeFunction* _tmp290_;
11939 BalaCCodeFunction* _tmp291_;
11940 gchar* _tmp292_;
11941 gchar* _tmp293_;
11942 BalaCCodeExpression* _tmp294_;
11943 BalaCCodeExpression* _tmp295_;
11944 gchar* _tmp296_;
11945 gchar* _tmp297_;
11946 BalaCCodeMemberAccess* _tmp298_;
11947 BalaCCodeMemberAccess* _tmp299_;
11948 BalaCCodeFunctionCall* _tmp300_;
11949 _tmp278_ = parent_block;
11950 parent_block_id = bala_ccode_base_module_get_block_id (self, _tmp278_);
11951 _tmp279_ = g_strdup_printf ("block%d_data_ref", parent_block_id);
11952 _tmp280_ = _tmp279_;
11953 _tmp281_ = bala_ccode_identifier_new (_tmp280_);
11954 _tmp282_ = _tmp281_;
11955 _tmp283_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp282_);
11956 _tmp284_ = _tmp283_;
11957 _bala_ccode_node_unref0 (_tmp282_)((_tmp282_ == ((void*)0)) ? ((void*)0) : (_tmp282_ = (bala_ccode_node_unref
(_tmp282_), ((void*)0))))
;
11958 _g_free0 (_tmp280_)(_tmp280_ = (g_free (_tmp280_), ((void*)0)));
11959 ref_call = _tmp284_;
11960 _tmp285_ = ref_call;
11961 _tmp286_ = g_strdup_printf ("_data%d_", parent_block_id);
11962 _tmp287_ = _tmp286_;
11963 _tmp288_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp287_);
11964 _tmp289_ = _tmp288_;
11965 bala_ccode_function_call_add_argument (_tmp285_, _tmp289_);
11966 _bala_ccode_node_unref0 (_tmp289_)((_tmp289_ == ((void*)0)) ? ((void*)0) : (_tmp289_ = (bala_ccode_node_unref
(_tmp289_), ((void*)0))))
;
11967 _g_free0 (_tmp287_)(_tmp287_ = (g_free (_tmp287_), ((void*)0)));
11968 _tmp290_ = bala_ccode_base_module_get_ccode (self);
11969 _tmp291_ = _tmp290_;
11970 _tmp292_ = g_strdup_printf ("_data%d_", block_id);
11971 _tmp293_ = _tmp292_;
11972 _tmp294_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp293_);
11973 _tmp295_ = _tmp294_;
11974 _tmp296_ = g_strdup_printf ("_data%d_", parent_block_id);
11975 _tmp297_ = _tmp296_;
11976 _tmp298_ = bala_ccode_member_access_new_pointer (_tmp295_, _tmp297_);
11977 _tmp299_ = _tmp298_;
11978 _tmp300_ = ref_call;
11979 bala_ccode_function_add_assignment (_tmp291_, (BalaCCodeExpression*) _tmp299_, (BalaCCodeExpression*) _tmp300_);
11980 _bala_ccode_node_unref0 (_tmp299_)((_tmp299_ == ((void*)0)) ? ((void*)0) : (_tmp299_ = (bala_ccode_node_unref
(_tmp299_), ((void*)0))))
;
11981 _g_free0 (_tmp297_)(_tmp297_ = (g_free (_tmp297_), ((void*)0)));
11982 _bala_ccode_node_unref0 (_tmp295_)((_tmp295_ == ((void*)0)) ? ((void*)0) : (_tmp295_ = (bala_ccode_node_unref
(_tmp295_), ((void*)0))))
;
11983 _g_free0 (_tmp293_)(_tmp293_ = (g_free (_tmp293_), ((void*)0)));
11984 _bala_ccode_node_unref0 (ref_call)((ref_call == ((void*)0)) ? ((void*)0) : (ref_call = (bala_ccode_node_unref
(ref_call), ((void*)0))))
;
11985 } else {
11986 gboolean _tmp301_ = FALSE(0);
11987 gboolean _tmp302_ = FALSE(0);
11988 BalaMethod* _tmp303_;
11989 BalaMethod* _tmp304_;
11990 gboolean in_creation_method_with_chainup = FALSE(0);
11991 BalaDataType* this_type = NULL((void*)0);
11992 BalaDataType* _tmp311_;
11993 gboolean _tmp312_ = FALSE(0);
11994 BalaDataType* _tmp313_;
11995 BalaMethod* _tmp343_;
11996 BalaMethod* _tmp344_;
11997 _tmp303_ = bala_ccode_base_module_get_current_method (self);
11998 _tmp304_ = _tmp303_;
11999 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp304_, BALA_TYPE_CREATION_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp304_); GType __t = ((bala_creation_method_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
12000 BalaClass* _tmp305_;
12001 BalaClass* _tmp306_;
12002 _tmp305_ = bala_ccode_base_module_get_current_class (self);
12003 _tmp306_ = _tmp305_;
12004 _tmp302_ = _tmp306_ != NULL((void*)0);
12005 } else {
12006 _tmp302_ = FALSE(0);
12007 }
12008 if (_tmp302_) {
12009 BalaClass* _tmp307_;
12010 BalaClass* _tmp308_;
12011 BalaClass* _tmp309_;
12012 BalaClass* _tmp310_;
12013 _tmp307_ = bala_ccode_base_module_get_current_class (self);
12014 _tmp308_ = _tmp307_;
12015 _tmp309_ = bala_class_get_base_class (_tmp308_);
12016 _tmp310_ = _tmp309_;
12017 _tmp301_ = _tmp310_ != NULL((void*)0);
12018 } else {
12019 _tmp301_ = FALSE(0);
12020 }
12021 in_creation_method_with_chainup = _tmp301_;
12022 _tmp311_ = bala_ccode_base_module_get_this_type (self);
12023 this_type = _tmp311_;
12024 _tmp313_ = this_type;
12025 if (_tmp313_ != NULL((void*)0)) {
12026 gboolean _tmp314_ = FALSE(0);
12027 if (!in_creation_method_with_chainup) {
12028 _tmp314_ = TRUE(!(0));
12029 } else {
12030 BalaMethod* _tmp315_;
12031 BalaMethod* _tmp316_;
12032 BalaBlock* _tmp317_;
12033 BalaBlock* _tmp318_;
12034 _tmp315_ = bala_ccode_base_module_get_current_method (self);
12035 _tmp316_ = _tmp315_;
12036 _tmp317_ = bala_subroutine_get_body ((BalaSubroutine*) _tmp316_);
12037 _tmp318_ = _tmp317_;
12038 _tmp314_ = _tmp318_ != b;
12039 }
12040 _tmp312_ = _tmp314_;
12041 } else {
12042 _tmp312_ = FALSE(0);
12043 }
12044 if (_tmp312_) {
12045 BalaCCodeFunctionCall* ref_call = NULL((void*)0);
12046 BalaDataType* _tmp319_;
12047 BalaSourceReference* _tmp320_;
12048 BalaSourceReference* _tmp321_;
12049 BalaCCodeExpression* _tmp322_;
12050 BalaCCodeExpression* _tmp323_;
12051 BalaCCodeFunctionCall* _tmp324_;
12052 BalaCCodeFunctionCall* _tmp325_;
12053 BalaCCodeFunctionCall* _tmp326_;
12054 BalaCCodeExpression* _tmp327_;
12055 BalaCCodeExpression* _tmp328_;
12056 BalaCCodeExpression* _tmp329_ = NULL((void*)0);
12057 BalaCCodeExpression* instance = NULL((void*)0);
12058 BalaCCodeExpression* _tmp333_;
12059 BalaCCodeFunction* _tmp334_;
12060 BalaCCodeFunction* _tmp335_;
12061 gchar* _tmp336_;
12062 gchar* _tmp337_;
12063 BalaCCodeExpression* _tmp338_;
12064 BalaCCodeExpression* _tmp339_;
12065 BalaCCodeMemberAccess* _tmp340_;
12066 BalaCCodeMemberAccess* _tmp341_;
12067 BalaCCodeExpression* _tmp342_;
12068 _tmp319_ = this_type;
12069 _tmp320_ = bala_code_node_get_source_reference ((BalaCodeNode*) b);
12070 _tmp321_ = _tmp320_;
12071 _tmp322_ = bala_ccode_base_module_get_dup_func_expression (self, _tmp319_, _tmp321_, FALSE(0));
12072 _tmp323_ = _tmp322_;
12073 _tmp324_ = bala_ccode_function_call_new (_tmp323_);
12074 _tmp325_ = _tmp324_;
12075 _bala_ccode_node_unref0 (_tmp323_)((_tmp323_ == ((void*)0)) ? ((void*)0) : (_tmp323_ = (bala_ccode_node_unref
(_tmp323_), ((void*)0))))
;
12076 ref_call = _tmp325_;
12077 _tmp326_ = ref_call;
12078 _tmp327_ = bala_ccode_base_module_get_this_cexpression (self);
12079 _tmp328_ = _tmp327_;
12080 bala_ccode_function_call_add_argument (_tmp326_, _tmp328_);
12081 _bala_ccode_node_unref0 (_tmp328_)((_tmp328_ == ((void*)0)) ? ((void*)0) : (_tmp328_ = (bala_ccode_node_unref
(_tmp328_), ((void*)0))))
;
12082 if (bala_ccode_base_module_is_in_destructor (self)) {
12083 BalaCCodeIdentifier* _tmp330_;
12084 _tmp330_ = bala_ccode_identifier_new ("self");
12085 _bala_ccode_node_unref0 (_tmp329_)((_tmp329_ == ((void*)0)) ? ((void*)0) : (_tmp329_ = (bala_ccode_node_unref
(_tmp329_), ((void*)0))))
;
12086 _tmp329_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp330_, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp330_), ((bala_ccode_expression_get_type ())))))
;
12087 } else {
12088 BalaCCodeFunctionCall* _tmp331_;
12089 BalaCCodeExpression* _tmp332_;
12090 _tmp331_ = ref_call;
12091 _tmp332_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp331_, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp331_), ((bala_ccode_expression_get_type ())))))
);
12092 _bala_ccode_node_unref0 (_tmp329_)((_tmp329_ == ((void*)0)) ? ((void*)0) : (_tmp329_ = (bala_ccode_node_unref
(_tmp329_), ((void*)0))))
;
12093 _tmp329_ = _tmp332_;
12094 }
12095 _tmp333_ = _bala_ccode_node_ref0 (_tmp329_);
12096 instance = _tmp333_;
12097 _tmp334_ = bala_ccode_base_module_get_ccode (self);
12098 _tmp335_ = _tmp334_;
12099 _tmp336_ = g_strdup_printf ("_data%d_", block_id);
12100 _tmp337_ = _tmp336_;
12101 _tmp338_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp337_);
12102 _tmp339_ = _tmp338_;
12103 _tmp340_ = bala_ccode_member_access_new_pointer (_tmp339_, "self");
12104 _tmp341_ = _tmp340_;
12105 _tmp342_ = instance;
12106 bala_ccode_function_add_assignment (_tmp335_, (BalaCCodeExpression*) _tmp341_, _tmp342_);
12107 _bala_ccode_node_unref0 (_tmp341_)((_tmp341_ == ((void*)0)) ? ((void*)0) : (_tmp341_ = (bala_ccode_node_unref
(_tmp341_), ((void*)0))))
;
12108 _bala_ccode_node_unref0 (_tmp339_)((_tmp339_ == ((void*)0)) ? ((void*)0) : (_tmp339_ = (bala_ccode_node_unref
(_tmp339_), ((void*)0))))
;
12109 _g_free0 (_tmp337_)(_tmp337_ = (g_free (_tmp337_), ((void*)0)));
12110 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
12111 _bala_ccode_node_unref0 (_tmp329_)((_tmp329_ == ((void*)0)) ? ((void*)0) : (_tmp329_ = (bala_ccode_node_unref
(_tmp329_), ((void*)0))))
;
12112 _bala_ccode_node_unref0 (ref_call)((ref_call == ((void*)0)) ? ((void*)0) : (ref_call = (bala_ccode_node_unref
(ref_call), ((void*)0))))
;
12113 }
12114 _tmp343_ = bala_ccode_base_module_get_current_method (self);
12115 _tmp344_ = _tmp343_;
12116 if (_tmp344_ != NULL((void*)0)) {
12117 gchar** suffices = NULL((void*)0);
12118 gchar* _tmp345_;
12119 gchar* _tmp346_;
12120 gchar* _tmp347_;
12121 gchar** _tmp348_;
12122 gint suffices_length1;
12123 gint _suffices_size_;
12124 _tmp345_ = g_strdup ("type");
12125 _tmp346_ = g_strdup ("dup_func");
12126 _tmp347_ = g_strdup ("destroy_func");
12127 _tmp348_ = g_new0 (gchar*, 3 + 1)((gchar* *) g_malloc0_n ((3 + 1), sizeof (gchar*)));
12128 _tmp348_[0] = _tmp345_;
12129 _tmp348_[1] = _tmp346_;
12130 _tmp348_[2] = _tmp347_;
12131 suffices = _tmp348_;
12132 suffices_length1 = 3;
12133 _suffices_size_ = suffices_length1;
12134 {
12135 BalaList* _type_param_list = NULL((void*)0);
12136 BalaMethod* _tmp349_;
12137 BalaMethod* _tmp350_;
12138 BalaList* _tmp351_;
12139 BalaList* _tmp352_;
12140 gint _type_param_size = 0;
12141 BalaList* _tmp353_;
12142 gint _tmp354_;
12143 gint _tmp355_;
12144 gint _type_param_index = 0;
12145 _tmp349_ = bala_ccode_base_module_get_current_method (self);
12146 _tmp350_ = _tmp349_;
12147 _tmp351_ = bala_method_get_type_parameters (_tmp350_);
12148 _tmp352_ = _bala_iterable_ref0 (_tmp351_);
12149 _type_param_list = _tmp352_;
12150 _tmp353_ = _type_param_list;
12151 _tmp354_ = bala_collection_get_size ((BalaCollection*) _tmp353_);
12152 _tmp355_ = _tmp354_;
12153 _type_param_size = _tmp355_;
12154 _type_param_index = -1;
12155 while (TRUE(!(0))) {
12156 gint _tmp356_;
12157 gint _tmp357_;
12158 BalaTypeParameter* type_param = NULL((void*)0);
12159 BalaList* _tmp358_;
12160 gpointer _tmp359_;
12161 gchar** _tmp360_;
12162 gint _tmp360__length1;
12163 _type_param_index = _type_param_index + 1;
12164 _tmp356_ = _type_param_index;
12165 _tmp357_ = _type_param_size;
12166 if (!(_tmp356_ < _tmp357_)) {
12167 break;
12168 }
12169 _tmp358_ = _type_param_list;
12170 _tmp359_ = bala_list_get (_tmp358_, _type_param_index);
12171 type_param = (BalaTypeParameter*) _tmp359_;
12172 _tmp360_ = suffices;
12173 _tmp360__length1 = suffices_length1;
12174 {
12175 gchar** suffix_collection = NULL((void*)0);
12176 gint suffix_collection_length1 = 0;
12177 gint _suffix_collection_size_ = 0;
12178 gint suffix_it = 0;
12179 suffix_collection = _tmp360_;
12180 suffix_collection_length1 = _tmp360__length1;
12181 for (suffix_it = 0; suffix_it < suffix_collection_length1; suffix_it = suffix_it + 1) {
12182 gchar* _tmp361_;
12183 gchar* suffix = NULL((void*)0);
12184 _tmp361_ = g_strdup (suffix_collection[suffix_it]);
12185 suffix = _tmp361_;
12186 {
12187 gchar* func_name = NULL((void*)0);
12188 BalaTypeParameter* _tmp362_;
12189 const gchar* _tmp363_;
12190 const gchar* _tmp364_;
12191 gchar* _tmp365_;
12192 gchar* _tmp366_;
12193 const gchar* _tmp367_;
12194 gchar* _tmp368_;
12195 gchar* _tmp369_;
12196 BalaCCodeFunction* _tmp370_;
12197 BalaCCodeFunction* _tmp371_;
12198 gchar* _tmp372_;
12199 gchar* _tmp373_;
12200 BalaCCodeExpression* _tmp374_;
12201 BalaCCodeExpression* _tmp375_;
12202 const gchar* _tmp376_;
12203 BalaCCodeMemberAccess* _tmp377_;
12204 BalaCCodeMemberAccess* _tmp378_;
12205 const gchar* _tmp379_;
12206 BalaCCodeExpression* _tmp380_;
12207 BalaCCodeExpression* _tmp381_;
12208 _tmp362_ = type_param;
12209 _tmp363_ = bala_symbol_get_name ((BalaSymbol*) _tmp362_);
12210 _tmp364_ = _tmp363_;
12211 _tmp365_ = g_ascii_strdown (_tmp364_, (gssize) -1);
12212 _tmp366_ = _tmp365_;
12213 _tmp367_ = suffix;
12214 _tmp368_ = g_strdup_printf ("%s_%s", _tmp366_, _tmp367_);
12215 _tmp369_ = _tmp368_;
12216 _g_free0 (_tmp366_)(_tmp366_ = (g_free (_tmp366_), ((void*)0)));
12217 func_name = _tmp369_;
12218 _tmp370_ = bala_ccode_base_module_get_ccode (self);
12219 _tmp371_ = _tmp370_;
12220 _tmp372_ = g_strdup_printf ("_data%d_", block_id);
12221 _tmp373_ = _tmp372_;
12222 _tmp374_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp373_);
12223 _tmp375_ = _tmp374_;
12224 _tmp376_ = func_name;
12225 _tmp377_ = bala_ccode_member_access_new_pointer (_tmp375_, _tmp376_);
12226 _tmp378_ = _tmp377_;
12227 _tmp379_ = func_name;
12228 _tmp380_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp379_);
12229 _tmp381_ = _tmp380_;
12230 bala_ccode_function_add_assignment (_tmp371_, (BalaCCodeExpression*) _tmp378_, _tmp381_);
12231 _bala_ccode_node_unref0 (_tmp381_)((_tmp381_ == ((void*)0)) ? ((void*)0) : (_tmp381_ = (bala_ccode_node_unref
(_tmp381_), ((void*)0))))
;
12232 _bala_ccode_node_unref0 (_tmp378_)((_tmp378_ == ((void*)0)) ? ((void*)0) : (_tmp378_ = (bala_ccode_node_unref
(_tmp378_), ((void*)0))))
;
12233 _bala_ccode_node_unref0 (_tmp375_)((_tmp375_ == ((void*)0)) ? ((void*)0) : (_tmp375_ = (bala_ccode_node_unref
(_tmp375_), ((void*)0))))
;
12234 _g_free0 (_tmp373_)(_tmp373_ = (g_free (_tmp373_), ((void*)0)));
12235 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
12236 _g_free0 (suffix)(suffix = (g_free (suffix), ((void*)0)));
12237 }
12238 }
12239 }
12240 _bala_code_node_unref0 (type_param)((type_param == ((void*)0)) ? ((void*)0) : (type_param = (bala_code_node_unref
(type_param), ((void*)0))))
;
12241 }
12242 _bala_iterable_unref0 (_type_param_list)((_type_param_list == ((void*)0)) ? ((void*)0) : (_type_param_list
= (bala_iterable_unref (_type_param_list), ((void*)0))))
;
12243 }
12244 suffices = (_bala_array_free (suffices, suffices_length1, (GDestroyNotify) g_free), NULL((void*)0));
12245 }
12246 }
12247 _tmp382_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
12248 _tmp383_ = _tmp382_;
12249 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp383_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp383_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
12250 BalaMethod* m = NULL((void*)0);
12251 BalaSymbol* _tmp384_;
12252 BalaSymbol* _tmp385_;
12253 BalaMethod* _tmp386_;
12254 BalaMethod* _tmp421_;
12255 gboolean _tmp422_;
12256 gboolean _tmp423_;
12257 _tmp384_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
12258 _tmp385_ = _tmp384_;
12259 _tmp386_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp385_, BALA_TYPE_METHOD, BalaMethod)(((BalaMethod*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp385_), ((bala_method_get_type ())))))
);
12260 m = _tmp386_;
12261 {
12262 BalaList* _param_list = NULL((void*)0);
12263 BalaMethod* _tmp387_;
12264 BalaList* _tmp388_;
12265 BalaList* _tmp389_;
12266 gint _param_size = 0;
12267 BalaList* _tmp390_;
12268 gint _tmp391_;
12269 gint _tmp392_;
12270 gint _param_index = 0;
12271 _tmp387_ = m;
12272 _tmp388_ = bala_callable_get_parameters ((BalaCallable*) _tmp387_);
12273 _tmp389_ = _bala_iterable_ref0 (_tmp388_);
12274 _param_list = _tmp389_;
12275 _tmp390_ = _param_list;
12276 _tmp391_ = bala_collection_get_size ((BalaCollection*) _tmp390_);
12277 _tmp392_ = _tmp391_;
12278 _param_size = _tmp392_;
12279 _param_index = -1;
12280 while (TRUE(!(0))) {
12281 gint _tmp393_;
12282 gint _tmp394_;
12283 BalaParameter* param = NULL((void*)0);
12284 BalaList* _tmp395_;
12285 gpointer _tmp396_;
12286 BalaParameter* _tmp397_;
12287 gboolean _tmp398_;
12288 gboolean _tmp399_;
12289 _param_index = _param_index + 1;
12290 _tmp393_ = _param_index;
12291 _tmp394_ = _param_size;
12292 if (!(_tmp393_ < _tmp394_)) {
12293 break;
12294 }
12295 _tmp395_ = _param_list;
12296 _tmp396_ = bala_list_get (_tmp395_, _param_index);
12297 param = (BalaParameter*) _tmp396_;
12298 _tmp397_ = param;
12299 _tmp398_ = bala_parameter_get_captured (_tmp397_);
12300 _tmp399_ = _tmp398_;
12301 if (_tmp399_) {
12302 BalaParameter* _tmp400_;
12303 BalaCCodeStruct* _tmp401_;
12304 BalaParameter* _tmp402_;
12305 BalaDataType* _tmp403_;
12306 BalaDataType* _tmp404_;
12307 BalaTypeSymbol* _tmp405_;
12308 BalaTypeSymbol* _tmp406_;
12309 BalaCodeContext* _tmp407_;
12310 BalaSemanticAnalyzer* _tmp408_;
12311 BalaSemanticAnalyzer* _tmp409_;
12312 BalaDataType* _tmp410_;
12313 BalaTypeSymbol* _tmp411_;
12314 BalaTypeSymbol* _tmp412_;
12315 _tmp400_ = param;
12316 _tmp401_ = data;
12317 bala_ccode_base_module_capture_parameter (self, _tmp400_, _tmp401_, block_id);
12318 _tmp402_ = param;
12319 _tmp403_ = bala_variable_get_variable_type ((BalaVariable*) _tmp402_);
12320 _tmp404_ = _tmp403_;
12321 _tmp405_ = bala_data_type_get_type_symbol (_tmp404_);
12322 _tmp406_ = _tmp405_;
12323 _tmp407_ = self->priv->_context;
12324 _tmp408_ = bala_code_context_get_analyzer (_tmp407_);
12325 _tmp409_ = _tmp408_;
12326 _tmp410_ = _tmp409_->va_list_type;
12327 _tmp411_ = bala_data_type_get_type_symbol (_tmp410_);
12328 _tmp412_ = _tmp411_;
12329 if (_tmp406_ == _tmp412_) {
12330 BalaParameter* _tmp413_;
12331 BalaSourceReference* _tmp414_;
12332 BalaSourceReference* _tmp415_;
12333 BalaParameter* _tmp416_;
12334 gchar* _tmp417_;
12335 gchar* _tmp418_;
12336 gchar* _tmp419_;
12337 gchar* _tmp420_;
12338 _tmp413_ = param;
12339 _tmp414_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp413_);
12340 _tmp415_ = _tmp414_;
12341 _tmp416_ = param;
12342 _tmp417_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp416_);
12343 _tmp418_ = _tmp417_;
12344 _tmp419_ = g_strdup_printf ("internal: Capturing `va_list' parameter `%s' is not allowed", _tmp418_);
12345 _tmp420_ = _tmp419_;
12346 bala_report_error (_tmp415_, _tmp420_);
12347 _g_free0 (_tmp420_)(_tmp420_ = (g_free (_tmp420_), ((void*)0)));
12348 _g_free0 (_tmp418_)(_tmp418_ = (g_free (_tmp418_), ((void*)0)));
12349 bala_code_node_set_error ((BalaCodeNode*) b, TRUE(!(0)));
12350 }
12351 }
12352 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
12353 }
12354 _bala_iterable_unref0 (_param_list)((_param_list == ((void*)0)) ? ((void*)0) : (_param_list = (bala_iterable_unref
(_param_list), ((void*)0))))
;
12355 }
12356 _tmp421_ = m;
12357 _tmp422_ = bala_method_get_coroutine (_tmp421_);
12358 _tmp423_ = _tmp422_;
12359 if (_tmp423_) {
12360 BalaCCodeStruct* _tmp424_;
12361 BalaDataType* _tmp425_;
12362 gchar* _tmp426_;
12363 gchar* _tmp427_;
12364 BalaCCodeFunction* _tmp428_;
12365 BalaCCodeFunction* _tmp429_;
12366 gchar* _tmp430_;
12367 gchar* _tmp431_;
12368 BalaCCodeExpression* _tmp432_;
12369 BalaCCodeExpression* _tmp433_;
12370 BalaCCodeMemberAccess* _tmp434_;
12371 BalaCCodeMemberAccess* _tmp435_;
12372 BalaCCodeIdentifier* _tmp436_;
12373 BalaCCodeIdentifier* _tmp437_;
12374 _tmp424_ = data;
12375 _tmp425_ = self->pointer_type;
12376 _tmp426_ = bala_get_ccode_name ((BalaCodeNode*) _tmp425_);
12377 _tmp427_ = _tmp426_;
12378 bala_ccode_struct_add_field (_tmp424_, _tmp427_, "_async_data_", 0, NULL((void*)0));
12379 _g_free0 (_tmp427_)(_tmp427_ = (g_free (_tmp427_), ((void*)0)));
12380 _tmp428_ = bala_ccode_base_module_get_ccode (self);
12381 _tmp429_ = _tmp428_;
12382 _tmp430_ = g_strdup_printf ("_data%d_", block_id);
12383 _tmp431_ = _tmp430_;
12384 _tmp432_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp431_);
12385 _tmp433_ = _tmp432_;
12386 _tmp434_ = bala_ccode_member_access_new_pointer (_tmp433_, "_async_data_");
12387 _tmp435_ = _tmp434_;
12388 _tmp436_ = bala_ccode_identifier_new ("_data_");
12389 _tmp437_ = _tmp436_;
12390 bala_ccode_function_add_assignment (_tmp429_, (BalaCCodeExpression*) _tmp435_, (BalaCCodeExpression*) _tmp437_);
12391 _bala_ccode_node_unref0 (_tmp437_)((_tmp437_ == ((void*)0)) ? ((void*)0) : (_tmp437_ = (bala_ccode_node_unref
(_tmp437_), ((void*)0))))
;
12392 _bala_ccode_node_unref0 (_tmp435_)((_tmp435_ == ((void*)0)) ? ((void*)0) : (_tmp435_ = (bala_ccode_node_unref
(_tmp435_), ((void*)0))))
;
12393 _bala_ccode_node_unref0 (_tmp433_)((_tmp433_ == ((void*)0)) ? ((void*)0) : (_tmp433_ = (bala_ccode_node_unref
(_tmp433_), ((void*)0))))
;
12394 _g_free0 (_tmp431_)(_tmp431_ = (g_free (_tmp431_), ((void*)0)));
12395 }
12396 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
12397 } else {
12398 BalaSymbol* _tmp438_;
12399 BalaSymbol* _tmp439_;
12400 _tmp438_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
12401 _tmp439_ = _tmp438_;
12402 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp439_, BALA_TYPE_PROPERTY_ACCESSOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp439_); GType __t = ((bala_property_accessor_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
12403 BalaPropertyAccessor* acc = NULL((void*)0);
12404 BalaSymbol* _tmp440_;
12405 BalaSymbol* _tmp441_;
12406 BalaPropertyAccessor* _tmp442_;
12407 gboolean _tmp443_ = FALSE(0);
12408 BalaPropertyAccessor* _tmp444_;
12409 gboolean _tmp445_;
12410 gboolean _tmp446_;
12411 _tmp440_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
12412 _tmp441_ = _tmp440_;
12413 _tmp442_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp441_, BALA_TYPE_PROPERTY_ACCESSOR, BalaPropertyAccessor)(((BalaPropertyAccessor*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp441_), ((bala_property_accessor_get_type ())))))
);
12414 acc = _tmp442_;
12415 _tmp444_ = acc;
12416 _tmp445_ = bala_property_accessor_get_readable (_tmp444_);
12417 _tmp446_ = _tmp445_;
12418 if (!_tmp446_) {
12419 BalaPropertyAccessor* _tmp447_;
12420 BalaParameter* _tmp448_;
12421 BalaParameter* _tmp449_;
12422 gboolean _tmp450_;
12423 gboolean _tmp451_;
12424 _tmp447_ = acc;
12425 _tmp448_ = bala_property_accessor_get_value_parameter (_tmp447_);
12426 _tmp449_ = _tmp448_;
12427 _tmp450_ = bala_parameter_get_captured (_tmp449_);
12428 _tmp451_ = _tmp450_;
12429 _tmp443_ = _tmp451_;
12430 } else {
12431 _tmp443_ = FALSE(0);
12432 }
12433 if (_tmp443_) {
12434 BalaPropertyAccessor* _tmp452_;
12435 BalaParameter* _tmp453_;
12436 BalaParameter* _tmp454_;
12437 BalaCCodeStruct* _tmp455_;
12438 _tmp452_ = acc;
12439 _tmp453_ = bala_property_accessor_get_value_parameter (_tmp452_);
12440 _tmp454_ = _tmp453_;
12441 _tmp455_ = data;
12442 bala_ccode_base_module_capture_parameter (self, _tmp454_, _tmp455_, block_id);
12443 }
12444 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
12445 } else {
12446 BalaSymbol* _tmp456_;
12447 BalaSymbol* _tmp457_;
12448 _tmp456_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
12449 _tmp457_ = _tmp456_;
12450 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp457_, BALA_TYPE_FOREACH_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp457_); GType __t = ((bala_foreach_statement_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
12451 BalaForeachStatement* stmt = NULL((void*)0);
12452 BalaSymbol* _tmp458_;
12453 BalaSymbol* _tmp459_;
12454 BalaForeachStatement* _tmp460_;
12455 gboolean _tmp461_ = FALSE(0);
12456 BalaForeachStatement* _tmp462_;
12457 gboolean _tmp463_;
12458 gboolean _tmp464_;
12459 _tmp458_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
12460 _tmp459_ = _tmp458_;
12461 _tmp460_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp459_, BALA_TYPE_FOREACH_STATEMENT, BalaForeachStatement)(((BalaForeachStatement*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp459_), ((bala_foreach_statement_get_type ())))))
);
12462 stmt = _tmp460_;
12463 _tmp462_ = stmt;
12464 _tmp463_ = bala_foreach_statement_get_use_iterator (_tmp462_);
12465 _tmp464_ = _tmp463_;
12466 if (!_tmp464_) {
12467 BalaForeachStatement* _tmp465_;
12468 BalaLocalVariable* _tmp466_;
12469 BalaLocalVariable* _tmp467_;
12470 gboolean _tmp468_;
12471 gboolean _tmp469_;
12472 _tmp465_ = stmt;
12473 _tmp466_ = bala_foreach_statement_get_element_variable (_tmp465_);
12474 _tmp467_ = _tmp466_;
12475 _tmp468_ = bala_local_variable_get_captured (_tmp467_);
12476 _tmp469_ = _tmp468_;
12477 _tmp461_ = _tmp469_;
12478 } else {
12479 _tmp461_ = FALSE(0);
12480 }
12481 if (_tmp461_) {
12482 BalaCCodeFunction* _tmp470_;
12483 BalaCCodeFunction* _tmp471_;
12484 gchar* _tmp472_;
12485 gchar* _tmp473_;
12486 BalaCCodeExpression* _tmp474_;
12487 BalaCCodeExpression* _tmp475_;
12488 BalaForeachStatement* _tmp476_;
12489 BalaLocalVariable* _tmp477_;
12490 BalaLocalVariable* _tmp478_;
12491 gchar* _tmp479_;
12492 gchar* _tmp480_;
12493 BalaCCodeMemberAccess* _tmp481_;
12494 BalaCCodeMemberAccess* _tmp482_;
12495 BalaForeachStatement* _tmp483_;
12496 BalaLocalVariable* _tmp484_;
12497 BalaLocalVariable* _tmp485_;
12498 gchar* _tmp486_;
12499 gchar* _tmp487_;
12500 BalaCCodeExpression* _tmp488_;
12501 BalaCCodeExpression* _tmp489_;
12502 _tmp470_ = bala_ccode_base_module_get_ccode (self);
12503 _tmp471_ = _tmp470_;
12504 _tmp472_ = g_strdup_printf ("_data%d_", block_id);
12505 _tmp473_ = _tmp472_;
12506 _tmp474_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp473_);
12507 _tmp475_ = _tmp474_;
12508 _tmp476_ = stmt;
12509 _tmp477_ = bala_foreach_statement_get_element_variable (_tmp476_);
12510 _tmp478_ = _tmp477_;
12511 _tmp479_ = bala_ccode_base_module_get_local_cname (self, _tmp478_);
12512 _tmp480_ = _tmp479_;
12513 _tmp481_ = bala_ccode_member_access_new_pointer (_tmp475_, _tmp480_);
12514 _tmp482_ = _tmp481_;
12515 _tmp483_ = stmt;
12516 _tmp484_ = bala_foreach_statement_get_element_variable (_tmp483_);
12517 _tmp485_ = _tmp484_;
12518 _tmp486_ = bala_ccode_base_module_get_local_cname (self, _tmp485_);
12519 _tmp487_ = _tmp486_;
12520 _tmp488_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp487_);
12521 _tmp489_ = _tmp488_;
12522 bala_ccode_function_add_assignment (_tmp471_, (BalaCCodeExpression*) _tmp482_, _tmp489_);
12523 _bala_ccode_node_unref0 (_tmp489_)((_tmp489_ == ((void*)0)) ? ((void*)0) : (_tmp489_ = (bala_ccode_node_unref
(_tmp489_), ((void*)0))))
;
12524 _g_free0 (_tmp487_)(_tmp487_ = (g_free (_tmp487_), ((void*)0)));
12525 _bala_ccode_node_unref0 (_tmp482_)((_tmp482_ == ((void*)0)) ? ((void*)0) : (_tmp482_ = (bala_ccode_node_unref
(_tmp482_), ((void*)0))))
;
12526 _g_free0 (_tmp480_)(_tmp480_ = (g_free (_tmp480_), ((void*)0)));
12527 _bala_ccode_node_unref0 (_tmp475_)((_tmp475_ == ((void*)0)) ? ((void*)0) : (_tmp475_ = (bala_ccode_node_unref
(_tmp475_), ((void*)0))))
;
12528 _g_free0 (_tmp473_)(_tmp473_ = (g_free (_tmp473_), ((void*)0)));
12529 }
12530 _bala_code_node_unref0 (stmt)((stmt == ((void*)0)) ? ((void*)0) : (stmt = (bala_code_node_unref
(stmt), ((void*)0))))
;
12531 }
12532 }
12533 }
12534 _tmp490_ = struct_name;
12535 _tmp491_ = g_strconcat ("struct _", _tmp490_, NULL((void*)0));
12536 _tmp492_ = _tmp491_;
12537 _tmp493_ = struct_name;
12538 _tmp494_ = bala_ccode_variable_declarator_new (_tmp493_, NULL((void*)0), NULL((void*)0));
12539 _tmp495_ = _tmp494_;
12540 _tmp496_ = bala_ccode_type_definition_new (_tmp492_, (BalaCCodeDeclarator*) _tmp495_);
12541 _tmp497_ = _tmp496_;
12542 _bala_ccode_node_unref0 (_tmp495_)((_tmp495_ == ((void*)0)) ? ((void*)0) : (_tmp495_ = (bala_ccode_node_unref
(_tmp495_), ((void*)0))))
;
12543 _g_free0 (_tmp492_)(_tmp492_ = (g_free (_tmp492_), ((void*)0)));
12544 _typedef_ = _tmp497_;
12545 _tmp498_ = self->cfile;
12546 _tmp499_ = _typedef_;
12547 bala_ccode_file_add_type_declaration (_tmp498_, (BalaCCodeNode*) _tmp499_);
12548 _tmp500_ = self->cfile;
12549 _tmp501_ = data;
12550 bala_ccode_file_add_type_definition (_tmp500_, (BalaCCodeNode*) _tmp501_);
12551 _tmp502_ = g_strdup_printf ("block%d_data_ref", block_id);
12552 _tmp503_ = _tmp502_;
12553 _tmp504_ = struct_name;
12554 _tmp505_ = g_strconcat (_tmp504_, "*", NULL((void*)0));
12555 _tmp506_ = _tmp505_;
12556 _tmp507_ = bala_ccode_function_new (_tmp503_, _tmp506_);
12557 _tmp508_ = _tmp507_;
12558 _g_free0 (_tmp506_)(_tmp506_ = (g_free (_tmp506_), ((void*)0)));
12559 _g_free0 (_tmp503_)(_tmp503_ = (g_free (_tmp503_), ((void*)0)));
12560 ref_fun = _tmp508_;
12561 _tmp509_ = ref_fun;
12562 _tmp510_ = g_strdup_printf ("_data%d_", block_id);
12563 _tmp511_ = _tmp510_;
12564 _tmp512_ = struct_name;
12565 _tmp513_ = g_strconcat (_tmp512_, "*", NULL((void*)0));
12566 _tmp514_ = _tmp513_;
12567 _tmp515_ = bala_ccode_parameter_new (_tmp511_, _tmp514_);
12568 _tmp516_ = _tmp515_;
12569 bala_ccode_function_add_parameter (_tmp509_, _tmp516_);
12570 _bala_ccode_node_unref0 (_tmp516_)((_tmp516_ == ((void*)0)) ? ((void*)0) : (_tmp516_ = (bala_ccode_node_unref
(_tmp516_), ((void*)0))))
;
12571 _g_free0 (_tmp514_)(_tmp514_ = (g_free (_tmp514_), ((void*)0)));
12572 _g_free0 (_tmp511_)(_tmp511_ = (g_free (_tmp511_), ((void*)0)));
12573 _tmp517_ = ref_fun;
12574 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp517_, BALA_CCODE_MODIFIERS_STATIC);
12575 _tmp518_ = ref_fun;
12576 bala_ccode_base_module_push_function (self, _tmp518_);
12577 _tmp519_ = bala_ccode_identifier_new ("g_atomic_int_inc");
12578 _tmp520_ = _tmp519_;
12579 _tmp521_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp520_);
12580 _tmp522_ = _tmp521_;
12581 _bala_ccode_node_unref0 (_tmp520_)((_tmp520_ == ((void*)0)) ? ((void*)0) : (_tmp520_ = (bala_ccode_node_unref
(_tmp520_), ((void*)0))))
;
12582 ccall = _tmp522_;
12583 _tmp523_ = ccall;
12584 _tmp524_ = g_strdup_printf ("_data%d_", block_id);
12585 _tmp525_ = _tmp524_;
12586 _tmp526_ = bala_ccode_identifier_new (_tmp525_);
12587 _tmp527_ = _tmp526_;
12588 _tmp528_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp527_, "_ref_count_");
12589 _tmp529_ = _tmp528_;
12590 _tmp530_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp529_);
12591 _tmp531_ = _tmp530_;
12592 bala_ccode_function_call_add_argument (_tmp523_, (BalaCCodeExpression*) _tmp531_);
12593 _bala_ccode_node_unref0 (_tmp531_)((_tmp531_ == ((void*)0)) ? ((void*)0) : (_tmp531_ = (bala_ccode_node_unref
(_tmp531_), ((void*)0))))
;
12594 _bala_ccode_node_unref0 (_tmp529_)((_tmp529_ == ((void*)0)) ? ((void*)0) : (_tmp529_ = (bala_ccode_node_unref
(_tmp529_), ((void*)0))))
;
12595 _bala_ccode_node_unref0 (_tmp527_)((_tmp527_ == ((void*)0)) ? ((void*)0) : (_tmp527_ = (bala_ccode_node_unref
(_tmp527_), ((void*)0))))
;
12596 _g_free0 (_tmp525_)(_tmp525_ = (g_free (_tmp525_), ((void*)0)));
12597 _tmp532_ = bala_ccode_base_module_get_ccode (self);
12598 _tmp533_ = _tmp532_;
12599 _tmp534_ = ccall;
12600 bala_ccode_function_add_expression (_tmp533_, (BalaCCodeExpression*) _tmp534_);
12601 _tmp535_ = bala_ccode_base_module_get_ccode (self);
12602 _tmp536_ = _tmp535_;
12603 _tmp537_ = g_strdup_printf ("_data%d_", block_id);
12604 _tmp538_ = _tmp537_;
12605 _tmp539_ = bala_ccode_identifier_new (_tmp538_);
12606 _tmp540_ = _tmp539_;
12607 bala_ccode_function_add_return (_tmp536_, (BalaCCodeExpression*) _tmp540_);
12608 _bala_ccode_node_unref0 (_tmp540_)((_tmp540_ == ((void*)0)) ? ((void*)0) : (_tmp540_ = (bala_ccode_node_unref
(_tmp540_), ((void*)0))))
;
12609 _g_free0 (_tmp538_)(_tmp538_ = (g_free (_tmp538_), ((void*)0)));
12610 bala_ccode_base_module_pop_function (self);
12611 _tmp541_ = self->cfile;
12612 _tmp542_ = ref_fun;
12613 bala_ccode_file_add_function_declaration (_tmp541_, _tmp542_);
12614 _tmp543_ = self->cfile;
12615 _tmp544_ = ref_fun;
12616 bala_ccode_file_add_function (_tmp543_, _tmp544_);
12617 _tmp545_ = g_strdup_printf ("block%d_data_unref", block_id);
12618 _tmp546_ = _tmp545_;
12619 _tmp547_ = bala_ccode_function_new (_tmp546_, "void");
12620 _tmp548_ = _tmp547_;
12621 _g_free0 (_tmp546_)(_tmp546_ = (g_free (_tmp546_), ((void*)0)));
12622 unref_fun = _tmp548_;
12623 _tmp549_ = unref_fun;
12624 _tmp550_ = bala_ccode_parameter_new ("_userdata_", "void *");
12625 _tmp551_ = _tmp550_;
12626 bala_ccode_function_add_parameter (_tmp549_, _tmp551_);
12627 _bala_ccode_node_unref0 (_tmp551_)((_tmp551_ == ((void*)0)) ? ((void*)0) : (_tmp551_ = (bala_ccode_node_unref
(_tmp551_), ((void*)0))))
;
12628 _tmp552_ = unref_fun;
12629 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp552_, BALA_CCODE_MODIFIERS_STATIC);
12630 _tmp553_ = unref_fun;
12631 bala_ccode_base_module_push_function (self, _tmp553_);
12632 _tmp554_ = bala_ccode_base_module_get_ccode (self);
12633 _tmp555_ = _tmp554_;
12634 _tmp556_ = struct_name;
12635 _tmp557_ = g_strconcat (_tmp556_, "*", NULL((void*)0));
12636 _tmp558_ = _tmp557_;
12637 _tmp559_ = g_strdup_printf ("_data%d_", block_id);
12638 _tmp560_ = _tmp559_;
12639 _tmp561_ = bala_ccode_identifier_new ("_userdata_");
12640 _tmp562_ = _tmp561_;
12641 _tmp563_ = struct_name;
12642 _tmp564_ = g_strconcat (_tmp563_, "*", NULL((void*)0));
12643 _tmp565_ = _tmp564_;
12644 _tmp566_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp562_, _tmp565_);
12645 _tmp567_ = _tmp566_;
12646 _tmp568_ = bala_ccode_variable_declarator_new (_tmp560_, (BalaCCodeExpression*) _tmp567_, NULL((void*)0));
12647 _tmp569_ = _tmp568_;
12648 bala_ccode_function_add_declaration (_tmp555_, _tmp558_, (BalaCCodeDeclarator*) _tmp569_, 0);
12649 _bala_ccode_node_unref0 (_tmp569_)((_tmp569_ == ((void*)0)) ? ((void*)0) : (_tmp569_ = (bala_ccode_node_unref
(_tmp569_), ((void*)0))))
;
12650 _bala_ccode_node_unref0 (_tmp567_)((_tmp567_ == ((void*)0)) ? ((void*)0) : (_tmp567_ = (bala_ccode_node_unref
(_tmp567_), ((void*)0))))
;
12651 _g_free0 (_tmp565_)(_tmp565_ = (g_free (_tmp565_), ((void*)0)));
12652 _bala_ccode_node_unref0 (_tmp562_)((_tmp562_ == ((void*)0)) ? ((void*)0) : (_tmp562_ = (bala_ccode_node_unref
(_tmp562_), ((void*)0))))
;
12653 _g_free0 (_tmp560_)(_tmp560_ = (g_free (_tmp560_), ((void*)0)));
12654 _g_free0 (_tmp558_)(_tmp558_ = (g_free (_tmp558_), ((void*)0)));
12655 _tmp570_ = bala_ccode_identifier_new ("g_atomic_int_dec_and_test");
12656 _tmp571_ = _tmp570_;
12657 _tmp572_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp571_);
12658 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
12659 ccall = _tmp572_;
12660 _bala_ccode_node_unref0 (_tmp571_)((_tmp571_ == ((void*)0)) ? ((void*)0) : (_tmp571_ = (bala_ccode_node_unref
(_tmp571_), ((void*)0))))
;
12661 _tmp573_ = ccall;
12662 _tmp574_ = g_strdup_printf ("_data%d_", block_id);
12663 _tmp575_ = _tmp574_;
12664 _tmp576_ = bala_ccode_identifier_new (_tmp575_);
12665 _tmp577_ = _tmp576_;
12666 _tmp578_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp577_, "_ref_count_");
12667 _tmp579_ = _tmp578_;
12668 _tmp580_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp579_);
12669 _tmp581_ = _tmp580_;
12670 bala_ccode_function_call_add_argument (_tmp573_, (BalaCCodeExpression*) _tmp581_);
12671 _bala_ccode_node_unref0 (_tmp581_)((_tmp581_ == ((void*)0)) ? ((void*)0) : (_tmp581_ = (bala_ccode_node_unref
(_tmp581_), ((void*)0))))
;
12672 _bala_ccode_node_unref0 (_tmp579_)((_tmp579_ == ((void*)0)) ? ((void*)0) : (_tmp579_ = (bala_ccode_node_unref
(_tmp579_), ((void*)0))))
;
12673 _bala_ccode_node_unref0 (_tmp577_)((_tmp577_ == ((void*)0)) ? ((void*)0) : (_tmp577_ = (bala_ccode_node_unref
(_tmp577_), ((void*)0))))
;
12674 _g_free0 (_tmp575_)(_tmp575_ = (g_free (_tmp575_), ((void*)0)));
12675 _tmp582_ = bala_ccode_base_module_get_ccode (self);
12676 _tmp583_ = _tmp582_;
12677 _tmp584_ = ccall;
12678 bala_ccode_function_open_if (_tmp583_, (BalaCCodeExpression*) _tmp584_);
12679 _tmp585_ = g_strdup_printf ("_data%d_", block_id);
12680 _tmp586_ = _tmp585_;
12681 _tmp587_ = bala_ccode_identifier_new (_tmp586_);
12682 _tmp588_ = (BalaCCodeExpression*) _tmp587_;
12683 _g_free0 (_tmp586_)(_tmp586_ = (g_free (_tmp586_), ((void*)0)));
12684 outer_block = _tmp588_;
12685 parent_closure_block = b;
12686 while (TRUE(!(0))) {
12687 BalaBlock* _tmp589_;
12688 BalaSymbol* _tmp590_;
12689 BalaSymbol* _tmp591_;
12690 BalaBlock* _tmp592_;
12691 BalaBlock* _tmp593_;
12692 gint parent_block_id = 0;
12693 BalaBlock* _tmp594_;
12694 BalaCCodeExpression* _tmp595_;
12695 gchar* _tmp596_;
12696 gchar* _tmp597_;
12697 BalaCCodeMemberAccess* _tmp598_;
12698 _tmp589_ = parent_closure_block;
12699 _tmp590_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp589_);
12700 _tmp591_ = _tmp590_;
12701 _tmp592_ = bala_ccode_base_module_next_closure_block (self, _tmp591_);
12702 parent_closure_block = _tmp592_;
12703 _tmp593_ = parent_closure_block;
12704 if (_tmp593_ == NULL((void*)0)) {
12705 break;
12706 }
12707 _tmp594_ = parent_closure_block;
12708 parent_block_id = bala_ccode_base_module_get_block_id (self, _tmp594_);
12709 _tmp595_ = outer_block;
12710 _tmp596_ = g_strdup_printf ("_data%d_", parent_block_id);
12711 _tmp597_ = _tmp596_;
12712 _tmp598_ = bala_ccode_member_access_new_pointer (_tmp595_, _tmp597_);
12713 _bala_ccode_node_unref0 (outer_block)((outer_block == ((void*)0)) ? ((void*)0) : (outer_block = (bala_ccode_node_unref
(outer_block), ((void*)0))))
;
12714 outer_block = (BalaCCodeExpression*) _tmp598_;
12715 _g_free0 (_tmp597_)(_tmp597_ = (g_free (_tmp597_), ((void*)0)));
12716 }
12717 _tmp599_ = bala_ccode_base_module_get_this_type (self);
12718 _tmp600_ = _bala_code_node_ref0 (_tmp599_);
12719 this_type = _tmp600_;
12720 _tmp601_ = this_type;
12721 if (_tmp601_ != NULL((void*)0)) {
12722 BalaCCodeFunction* _tmp602_;
12723 BalaCCodeFunction* _tmp603_;
12724 BalaDataType* _tmp604_;
12725 gchar* _tmp605_;
12726 gchar* _tmp606_;
12727 BalaCCodeVariableDeclarator* _tmp607_;
12728 BalaCCodeVariableDeclarator* _tmp608_;
12729 BalaCCodeFunction* _tmp609_;
12730 BalaCCodeFunction* _tmp610_;
12731 BalaCCodeIdentifier* _tmp611_;
12732 BalaCCodeIdentifier* _tmp612_;
12733 BalaCCodeExpression* _tmp613_;
12734 BalaCCodeMemberAccess* _tmp614_;
12735 BalaCCodeMemberAccess* _tmp615_;
12736 _tmp602_ = bala_ccode_base_module_get_ccode (self);
12737 _tmp603_ = _tmp602_;
12738 _tmp604_ = this_type;
12739 _tmp605_ = bala_get_ccode_name ((BalaCodeNode*) _tmp604_);
12740 _tmp606_ = _tmp605_;
12741 _tmp607_ = bala_ccode_variable_declarator_new ("self", NULL((void*)0), NULL((void*)0));
12742 _tmp608_ = _tmp607_;
12743 bala_ccode_function_add_declaration (_tmp603_, _tmp606_, (BalaCCodeDeclarator*) _tmp608_, 0);
12744 _bala_ccode_node_unref0 (_tmp608_)((_tmp608_ == ((void*)0)) ? ((void*)0) : (_tmp608_ = (bala_ccode_node_unref
(_tmp608_), ((void*)0))))
;
12745 _g_free0 (_tmp606_)(_tmp606_ = (g_free (_tmp606_), ((void*)0)));
12746 _tmp609_ = bala_ccode_base_module_get_ccode (self);
12747 _tmp610_ = _tmp609_;
12748 _tmp611_ = bala_ccode_identifier_new ("self");
12749 _tmp612_ = _tmp611_;
12750 _tmp613_ = outer_block;
12751 _tmp614_ = bala_ccode_member_access_new_pointer (_tmp613_, "self");
12752 _tmp615_ = _tmp614_;
12753 bala_ccode_function_add_assignment (_tmp610_, (BalaCCodeExpression*) _tmp612_, (BalaCCodeExpression*) _tmp615_);
12754 _bala_ccode_node_unref0 (_tmp615_)((_tmp615_ == ((void*)0)) ? ((void*)0) : (_tmp615_ = (bala_ccode_node_unref
(_tmp615_), ((void*)0))))
;
12755 _bala_ccode_node_unref0 (_tmp612_)((_tmp612_ == ((void*)0)) ? ((void*)0) : (_tmp612_ = (bala_ccode_node_unref
(_tmp612_), ((void*)0))))
;
12756 }
12757 _tmp616_ = bala_ccode_base_module_get_current_method (self);
12758 _tmp617_ = _tmp616_;
12759 if (_tmp617_ != NULL((void*)0)) {
12760 {
12761 BalaList* _type_param_list = NULL((void*)0);
12762 BalaMethod* _tmp618_;
12763 BalaMethod* _tmp619_;
12764 BalaList* _tmp620_;
12765 BalaList* _tmp621_;
12766 gint _type_param_size = 0;
12767 BalaList* _tmp622_;
12768 gint _tmp623_;
12769 gint _tmp624_;
12770 gint _type_param_index = 0;
12771 _tmp618_ = bala_ccode_base_module_get_current_method (self);
12772 _tmp619_ = _tmp618_;
12773 _tmp620_ = bala_method_get_type_parameters (_tmp619_);
12774 _tmp621_ = _bala_iterable_ref0 (_tmp620_);
12775 _type_param_list = _tmp621_;
12776 _tmp622_ = _type_param_list;
12777 _tmp623_ = bala_collection_get_size ((BalaCollection*) _tmp622_);
12778 _tmp624_ = _tmp623_;
12779 _type_param_size = _tmp624_;
12780 _type_param_index = -1;
12781 while (TRUE(!(0))) {
12782 gint _tmp625_;
12783 gint _tmp626_;
12784 BalaTypeParameter* type_param = NULL((void*)0);
12785 BalaList* _tmp627_;
12786 gpointer _tmp628_;
12787 gchar* func_name = NULL((void*)0);
12788 BalaTypeParameter* _tmp629_;
12789 const gchar* _tmp630_;
12790 const gchar* _tmp631_;
12791 gchar* _tmp632_;
12792 gchar* _tmp633_;
12793 gchar* _tmp634_;
12794 BalaCCodeFunction* _tmp635_;
12795 BalaCCodeFunction* _tmp636_;
12796 const gchar* _tmp637_;
12797 BalaCCodeVariableDeclarator* _tmp638_;
12798 BalaCCodeVariableDeclarator* _tmp639_;
12799 BalaCCodeFunction* _tmp640_;
12800 BalaCCodeFunction* _tmp641_;
12801 const gchar* _tmp642_;
12802 BalaCCodeIdentifier* _tmp643_;
12803 BalaCCodeIdentifier* _tmp644_;
12804 BalaCCodeExpression* _tmp645_;
12805 const gchar* _tmp646_;
12806 BalaCCodeMemberAccess* _tmp647_;
12807 BalaCCodeMemberAccess* _tmp648_;
12808 BalaTypeParameter* _tmp649_;
12809 const gchar* _tmp650_;
12810 const gchar* _tmp651_;
12811 gchar* _tmp652_;
12812 gchar* _tmp653_;
12813 gchar* _tmp654_;
12814 BalaCCodeFunction* _tmp655_;
12815 BalaCCodeFunction* _tmp656_;
12816 const gchar* _tmp657_;
12817 BalaCCodeVariableDeclarator* _tmp658_;
12818 BalaCCodeVariableDeclarator* _tmp659_;
12819 BalaCCodeFunction* _tmp660_;
12820 BalaCCodeFunction* _tmp661_;
12821 const gchar* _tmp662_;
12822 BalaCCodeIdentifier* _tmp663_;
12823 BalaCCodeIdentifier* _tmp664_;
12824 BalaCCodeExpression* _tmp665_;
12825 const gchar* _tmp666_;
12826 BalaCCodeMemberAccess* _tmp667_;
12827 BalaCCodeMemberAccess* _tmp668_;
12828 BalaTypeParameter* _tmp669_;
12829 const gchar* _tmp670_;
12830 const gchar* _tmp671_;
12831 gchar* _tmp672_;
12832 gchar* _tmp673_;
12833 gchar* _tmp674_;
12834 BalaCCodeFunction* _tmp675_;
12835 BalaCCodeFunction* _tmp676_;
12836 const gchar* _tmp677_;
12837 BalaCCodeVariableDeclarator* _tmp678_;
12838 BalaCCodeVariableDeclarator* _tmp679_;
12839 BalaCCodeFunction* _tmp680_;
12840 BalaCCodeFunction* _tmp681_;
12841 const gchar* _tmp682_;
12842 BalaCCodeIdentifier* _tmp683_;
12843 BalaCCodeIdentifier* _tmp684_;
12844 BalaCCodeExpression* _tmp685_;
12845 const gchar* _tmp686_;
12846 BalaCCodeMemberAccess* _tmp687_;
12847 BalaCCodeMemberAccess* _tmp688_;
12848 _type_param_index = _type_param_index + 1;
12849 _tmp625_ = _type_param_index;
12850 _tmp626_ = _type_param_size;
12851 if (!(_tmp625_ < _tmp626_)) {
12852 break;
12853 }
12854 _tmp627_ = _type_param_list;
12855 _tmp628_ = bala_list_get (_tmp627_, _type_param_index);
12856 type_param = (BalaTypeParameter*) _tmp628_;
12857 _tmp629_ = type_param;
12858 _tmp630_ = bala_symbol_get_name ((BalaSymbol*) _tmp629_);
12859 _tmp631_ = _tmp630_;
12860 _tmp632_ = g_ascii_strdown (_tmp631_, (gssize) -1);
12861 _tmp633_ = _tmp632_;
12862 _tmp634_ = g_strdup_printf ("%s_type", _tmp633_);
12863 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
12864 func_name = _tmp634_;
12865 _g_free0 (_tmp633_)(_tmp633_ = (g_free (_tmp633_), ((void*)0)));
12866 _tmp635_ = bala_ccode_base_module_get_ccode (self);
12867 _tmp636_ = _tmp635_;
12868 _tmp637_ = func_name;
12869 _tmp638_ = bala_ccode_variable_declarator_new (_tmp637_, NULL((void*)0), NULL((void*)0));
12870 _tmp639_ = _tmp638_;
12871 bala_ccode_function_add_declaration (_tmp636_, "GType", (BalaCCodeDeclarator*) _tmp639_, 0);
12872 _bala_ccode_node_unref0 (_tmp639_)((_tmp639_ == ((void*)0)) ? ((void*)0) : (_tmp639_ = (bala_ccode_node_unref
(_tmp639_), ((void*)0))))
;
12873 _tmp640_ = bala_ccode_base_module_get_ccode (self);
12874 _tmp641_ = _tmp640_;
12875 _tmp642_ = func_name;
12876 _tmp643_ = bala_ccode_identifier_new (_tmp642_);
12877 _tmp644_ = _tmp643_;
12878 _tmp645_ = outer_block;
12879 _tmp646_ = func_name;
12880 _tmp647_ = bala_ccode_member_access_new_pointer (_tmp645_, _tmp646_);
12881 _tmp648_ = _tmp647_;
12882 bala_ccode_function_add_assignment (_tmp641_, (BalaCCodeExpression*) _tmp644_, (BalaCCodeExpression*) _tmp648_);
12883 _bala_ccode_node_unref0 (_tmp648_)((_tmp648_ == ((void*)0)) ? ((void*)0) : (_tmp648_ = (bala_ccode_node_unref
(_tmp648_), ((void*)0))))
;
12884 _bala_ccode_node_unref0 (_tmp644_)((_tmp644_ == ((void*)0)) ? ((void*)0) : (_tmp644_ = (bala_ccode_node_unref
(_tmp644_), ((void*)0))))
;
12885 _tmp649_ = type_param;
12886 _tmp650_ = bala_symbol_get_name ((BalaSymbol*) _tmp649_);
12887 _tmp651_ = _tmp650_;
12888 _tmp652_ = g_ascii_strdown (_tmp651_, (gssize) -1);
12889 _tmp653_ = _tmp652_;
12890 _tmp654_ = g_strdup_printf ("%s_dup_func", _tmp653_);
12891 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
12892 func_name = _tmp654_;
12893 _g_free0 (_tmp653_)(_tmp653_ = (g_free (_tmp653_), ((void*)0)));
12894 _tmp655_ = bala_ccode_base_module_get_ccode (self);
12895 _tmp656_ = _tmp655_;
12896 _tmp657_ = func_name;
12897 _tmp658_ = bala_ccode_variable_declarator_new (_tmp657_, NULL((void*)0), NULL((void*)0));
12898 _tmp659_ = _tmp658_;
12899 bala_ccode_function_add_declaration (_tmp656_, "GBoxedCopyFunc", (BalaCCodeDeclarator*) _tmp659_, 0);
12900 _bala_ccode_node_unref0 (_tmp659_)((_tmp659_ == ((void*)0)) ? ((void*)0) : (_tmp659_ = (bala_ccode_node_unref
(_tmp659_), ((void*)0))))
;
12901 _tmp660_ = bala_ccode_base_module_get_ccode (self);
12902 _tmp661_ = _tmp660_;
12903 _tmp662_ = func_name;
12904 _tmp663_ = bala_ccode_identifier_new (_tmp662_);
12905 _tmp664_ = _tmp663_;
12906 _tmp665_ = outer_block;
12907 _tmp666_ = func_name;
12908 _tmp667_ = bala_ccode_member_access_new_pointer (_tmp665_, _tmp666_);
12909 _tmp668_ = _tmp667_;
12910 bala_ccode_function_add_assignment (_tmp661_, (BalaCCodeExpression*) _tmp664_, (BalaCCodeExpression*) _tmp668_);
12911 _bala_ccode_node_unref0 (_tmp668_)((_tmp668_ == ((void*)0)) ? ((void*)0) : (_tmp668_ = (bala_ccode_node_unref
(_tmp668_), ((void*)0))))
;
12912 _bala_ccode_node_unref0 (_tmp664_)((_tmp664_ == ((void*)0)) ? ((void*)0) : (_tmp664_ = (bala_ccode_node_unref
(_tmp664_), ((void*)0))))
;
12913 _tmp669_ = type_param;
12914 _tmp670_ = bala_symbol_get_name ((BalaSymbol*) _tmp669_);
12915 _tmp671_ = _tmp670_;
12916 _tmp672_ = g_ascii_strdown (_tmp671_, (gssize) -1);
12917 _tmp673_ = _tmp672_;
12918 _tmp674_ = g_strdup_printf ("%s_destroy_func", _tmp673_);
12919 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
12920 func_name = _tmp674_;
12921 _g_free0 (_tmp673_)(_tmp673_ = (g_free (_tmp673_), ((void*)0)));
12922 _tmp675_ = bala_ccode_base_module_get_ccode (self);
12923 _tmp676_ = _tmp675_;
12924 _tmp677_ = func_name;
12925 _tmp678_ = bala_ccode_variable_declarator_new (_tmp677_, NULL((void*)0), NULL((void*)0));
12926 _tmp679_ = _tmp678_;
12927 bala_ccode_function_add_declaration (_tmp676_, "GDestroyNotify", (BalaCCodeDeclarator*) _tmp679_, 0);
12928 _bala_ccode_node_unref0 (_tmp679_)((_tmp679_ == ((void*)0)) ? ((void*)0) : (_tmp679_ = (bala_ccode_node_unref
(_tmp679_), ((void*)0))))
;
12929 _tmp680_ = bala_ccode_base_module_get_ccode (self);
12930 _tmp681_ = _tmp680_;
12931 _tmp682_ = func_name;
12932 _tmp683_ = bala_ccode_identifier_new (_tmp682_);
12933 _tmp684_ = _tmp683_;
12934 _tmp685_ = outer_block;
12935 _tmp686_ = func_name;
12936 _tmp687_ = bala_ccode_member_access_new_pointer (_tmp685_, _tmp686_);
12937 _tmp688_ = _tmp687_;
12938 bala_ccode_function_add_assignment (_tmp681_, (BalaCCodeExpression*) _tmp684_, (BalaCCodeExpression*) _tmp688_);
12939 _bala_ccode_node_unref0 (_tmp688_)((_tmp688_ == ((void*)0)) ? ((void*)0) : (_tmp688_ = (bala_ccode_node_unref
(_tmp688_), ((void*)0))))
;
12940 _bala_ccode_node_unref0 (_tmp684_)((_tmp684_ == ((void*)0)) ? ((void*)0) : (_tmp684_ = (bala_ccode_node_unref
(_tmp684_), ((void*)0))))
;
12941 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
12942 _bala_code_node_unref0 (type_param)((type_param == ((void*)0)) ? ((void*)0) : (type_param = (bala_code_node_unref
(type_param), ((void*)0))))
;
12943 }
12944 _bala_iterable_unref0 (_type_param_list)((_type_param_list == ((void*)0)) ? ((void*)0) : (_type_param_list
= (bala_iterable_unref (_type_param_list), ((void*)0))))
;
12945 }
12946 }
12947 {
12948 gint i = 0;
12949 BalaList* _tmp689_;
12950 gint _tmp690_;
12951 gint _tmp691_;
12952 _tmp689_ = local_vars;
12953 _tmp690_ = bala_collection_get_size ((BalaCollection*) _tmp689_);
12954 _tmp691_ = _tmp690_;
12955 i = _tmp691_ - 1;
12956 {
12957 gboolean _tmp692_ = FALSE(0);
12958 _tmp692_ = TRUE(!(0));
12959 while (TRUE(!(0))) {
12960 BalaLocalVariable* local = NULL((void*)0);
12961 BalaList* _tmp694_;
12962 gpointer _tmp695_;
12963 BalaLocalVariable* _tmp696_;
12964 gboolean _tmp697_;
12965 gboolean _tmp698_;
12966 if (!_tmp692_) {
12967 gint _tmp693_;
12968 _tmp693_ = i;
12969 i = _tmp693_ - 1;
12970 }
12971 _tmp692_ = FALSE(0);
12972 if (!(i >= 0)) {
12973 break;
12974 }
12975 _tmp694_ = local_vars;
12976 _tmp695_ = bala_list_get (_tmp694_, i);
12977 local = (BalaLocalVariable*) _tmp695_;
12978 _tmp696_ = local;
12979 _tmp697_ = bala_local_variable_get_captured (_tmp696_);
12980 _tmp698_ = _tmp697_;
12981 if (_tmp698_) {
12982 BalaLocalVariable* _tmp699_;
12983 BalaDataType* _tmp700_;
12984 BalaDataType* _tmp701_;
12985 _tmp699_ = local;
12986 _tmp700_ = bala_variable_get_variable_type ((BalaVariable*) _tmp699_);
12987 _tmp701_ = _tmp700_;
12988 if (bala_ccode_base_module_requires_destroy (_tmp701_)) {
12989 gboolean old_coroutine = FALSE(0);
12990 BalaMethod* _tmp702_;
12991 BalaMethod* _tmp703_;
12992 BalaCCodeFunction* _tmp710_;
12993 BalaCCodeFunction* _tmp711_;
12994 BalaLocalVariable* _tmp712_;
12995 BalaCCodeExpression* _tmp713_;
12996 BalaCCodeExpression* _tmp714_;
12997 old_coroutine = FALSE(0);
12998 _tmp702_ = bala_ccode_base_module_get_current_method (self);
12999 _tmp703_ = _tmp702_;
13000 if (_tmp703_ != NULL((void*)0)) {
13001 BalaMethod* _tmp704_;
13002 BalaMethod* _tmp705_;
13003 gboolean _tmp706_;
13004 gboolean _tmp707_;
13005 BalaMethod* _tmp708_;
13006 BalaMethod* _tmp709_;
13007 _tmp704_ = bala_ccode_base_module_get_current_method (self);
13008 _tmp705_ = _tmp704_;
13009 _tmp706_ = bala_method_get_coroutine (_tmp705_);
13010 _tmp707_ = _tmp706_;
13011 old_coroutine = _tmp707_;
13012 _tmp708_ = bala_ccode_base_module_get_current_method (self);
13013 _tmp709_ = _tmp708_;
13014 bala_method_set_coroutine (_tmp709_, FALSE(0));
13015 }
13016 _tmp710_ = bala_ccode_base_module_get_ccode (self);
13017 _tmp711_ = _tmp710_;
13018 _tmp712_ = local;
13019 _tmp713_ = bala_ccode_base_module_destroy_local (self, _tmp712_);
13020 _tmp714_ = _tmp713_;
13021 bala_ccode_function_add_expression (_tmp711_, _tmp714_);
13022 _bala_ccode_node_unref0 (_tmp714_)((_tmp714_ == ((void*)0)) ? ((void*)0) : (_tmp714_ = (bala_ccode_node_unref
(_tmp714_), ((void*)0))))
;
13023 if (old_coroutine) {
13024 BalaMethod* _tmp715_;
13025 BalaMethod* _tmp716_;
13026 _tmp715_ = bala_ccode_base_module_get_current_method (self);
13027 _tmp716_ = _tmp715_;
13028 bala_method_set_coroutine (_tmp716_, TRUE(!(0)));
13029 }
13030 }
13031 }
13032 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
13033 }
13034 }
13035 }
13036 _tmp717_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13037 _tmp718_ = _tmp717_;
13038 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp718_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp718_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
13039 BalaMethod* m = NULL((void*)0);
13040 BalaSymbol* _tmp719_;
13041 BalaSymbol* _tmp720_;
13042 BalaMethod* _tmp721_;
13043 _tmp719_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13044 _tmp720_ = _tmp719_;
13045 _tmp721_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp720_, BALA_TYPE_METHOD, BalaMethod)(((BalaMethod*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp720_), ((bala_method_get_type ())))))
);
13046 m = _tmp721_;
13047 {
13048 BalaList* _param_list = NULL((void*)0);
13049 BalaMethod* _tmp722_;
13050 BalaList* _tmp723_;
13051 BalaList* _tmp724_;
13052 gint _param_size = 0;
13053 BalaList* _tmp725_;
13054 gint _tmp726_;
13055 gint _tmp727_;
13056 gint _param_index = 0;
13057 _tmp722_ = m;
13058 _tmp723_ = bala_callable_get_parameters ((BalaCallable*) _tmp722_);
13059 _tmp724_ = _bala_iterable_ref0 (_tmp723_);
13060 _param_list = _tmp724_;
13061 _tmp725_ = _param_list;
13062 _tmp726_ = bala_collection_get_size ((BalaCollection*) _tmp725_);
13063 _tmp727_ = _tmp726_;
13064 _param_size = _tmp727_;
13065 _param_index = -1;
13066 while (TRUE(!(0))) {
13067 gint _tmp728_;
13068 gint _tmp729_;
13069 BalaParameter* param = NULL((void*)0);
13070 BalaList* _tmp730_;
13071 gpointer _tmp731_;
13072 BalaParameter* _tmp732_;
13073 gboolean _tmp733_;
13074 gboolean _tmp734_;
13075 _param_index = _param_index + 1;
13076 _tmp728_ = _param_index;
13077 _tmp729_ = _param_size;
13078 if (!(_tmp728_ < _tmp729_)) {
13079 break;
13080 }
13081 _tmp730_ = _param_list;
13082 _tmp731_ = bala_list_get (_tmp730_, _param_index);
13083 param = (BalaParameter*) _tmp731_;
13084 _tmp732_ = param;
13085 _tmp733_ = bala_parameter_get_captured (_tmp732_);
13086 _tmp734_ = _tmp733_;
13087 if (_tmp734_) {
13088 BalaDataType* param_type = NULL((void*)0);
13089 BalaParameter* _tmp735_;
13090 BalaDataType* _tmp736_;
13091 BalaDataType* _tmp737_;
13092 BalaDataType* _tmp738_;
13093 BalaDataType* _tmp739_;
13094 gboolean _tmp740_;
13095 gboolean _tmp741_;
13096 BalaDataType* _tmp744_;
13097 _tmp735_ = param;
13098 _tmp736_ = bala_variable_get_variable_type ((BalaVariable*) _tmp735_);
13099 _tmp737_ = _tmp736_;
13100 _tmp738_ = bala_data_type_copy (_tmp737_);
13101 param_type = _tmp738_;
13102 _tmp739_ = param_type;
13103 _tmp740_ = bala_data_type_get_value_owned (_tmp739_);
13104 _tmp741_ = _tmp740_;
13105 if (!_tmp741_) {
13106 BalaDataType* _tmp742_;
13107 BalaDataType* _tmp743_;
13108 _tmp742_ = param_type;
13109 _tmp743_ = param_type;
13110 bala_data_type_set_value_owned (_tmp742_, !bala_ccode_base_module_no_implicit_copy (self, _tmp743_));
13111 }
13112 _tmp744_ = param_type;
13113 if (bala_ccode_base_module_requires_destroy (_tmp744_)) {
13114 gboolean old_coroutine = FALSE(0);
13115 BalaMethod* _tmp745_;
13116 BalaCCodeFunction* _tmp750_;
13117 BalaCCodeFunction* _tmp751_;
13118 BalaParameter* _tmp752_;
13119 BalaCCodeExpression* _tmp753_;
13120 BalaCCodeExpression* _tmp754_;
13121 old_coroutine = FALSE(0);
13122 _tmp745_ = m;
13123 if (_tmp745_ != NULL((void*)0)) {
13124 BalaMethod* _tmp746_;
13125 gboolean _tmp747_;
13126 gboolean _tmp748_;
13127 BalaMethod* _tmp749_;
13128 _tmp746_ = m;
13129 _tmp747_ = bala_method_get_coroutine (_tmp746_);
13130 _tmp748_ = _tmp747_;
13131 old_coroutine = _tmp748_;
13132 _tmp749_ = m;
13133 bala_method_set_coroutine (_tmp749_, FALSE(0));
13134 }
13135 _tmp750_ = bala_ccode_base_module_get_ccode (self);
13136 _tmp751_ = _tmp750_;
13137 _tmp752_ = param;
13138 _tmp753_ = bala_ccode_base_module_destroy_parameter (self, _tmp752_);
13139 _tmp754_ = _tmp753_;
13140 bala_ccode_function_add_expression (_tmp751_, _tmp754_);
13141 _bala_ccode_node_unref0 (_tmp754_)((_tmp754_ == ((void*)0)) ? ((void*)0) : (_tmp754_ = (bala_ccode_node_unref
(_tmp754_), ((void*)0))))
;
13142 if (old_coroutine) {
13143 BalaMethod* _tmp755_;
13144 _tmp755_ = m;
13145 bala_method_set_coroutine (_tmp755_, TRUE(!(0)));
13146 }
13147 }
13148 _bala_code_node_unref0 (param_type)((param_type == ((void*)0)) ? ((void*)0) : (param_type = (bala_code_node_unref
(param_type), ((void*)0))))
;
13149 }
13150 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
13151 }
13152 _bala_iterable_unref0 (_param_list)((_param_list == ((void*)0)) ? ((void*)0) : (_param_list = (bala_iterable_unref
(_param_list), ((void*)0))))
;
13153 }
13154 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
13155 } else {
13156 BalaSymbol* _tmp756_;
13157 BalaSymbol* _tmp757_;
13158 _tmp756_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13159 _tmp757_ = _tmp756_;
13160 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp757_, BALA_TYPE_PROPERTY_ACCESSOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp757_); GType __t = ((bala_property_accessor_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
13161 BalaPropertyAccessor* acc = NULL((void*)0);
13162 BalaSymbol* _tmp758_;
13163 BalaSymbol* _tmp759_;
13164 BalaPropertyAccessor* _tmp760_;
13165 gboolean _tmp761_ = FALSE(0);
13166 BalaPropertyAccessor* _tmp762_;
13167 gboolean _tmp763_;
13168 gboolean _tmp764_;
13169 _tmp758_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13170 _tmp759_ = _tmp758_;
13171 _tmp760_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp759_, BALA_TYPE_PROPERTY_ACCESSOR, BalaPropertyAccessor)(((BalaPropertyAccessor*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp759_), ((bala_property_accessor_get_type ())))))
);
13172 acc = _tmp760_;
13173 _tmp762_ = acc;
13174 _tmp763_ = bala_property_accessor_get_readable (_tmp762_);
13175 _tmp764_ = _tmp763_;
13176 if (!_tmp764_) {
13177 BalaPropertyAccessor* _tmp765_;
13178 BalaParameter* _tmp766_;
13179 BalaParameter* _tmp767_;
13180 gboolean _tmp768_;
13181 gboolean _tmp769_;
13182 _tmp765_ = acc;
13183 _tmp766_ = bala_property_accessor_get_value_parameter (_tmp765_);
13184 _tmp767_ = _tmp766_;
13185 _tmp768_ = bala_parameter_get_captured (_tmp767_);
13186 _tmp769_ = _tmp768_;
13187 _tmp761_ = _tmp769_;
13188 } else {
13189 _tmp761_ = FALSE(0);
13190 }
13191 if (_tmp761_) {
13192 BalaDataType* param_type = NULL((void*)0);
13193 BalaPropertyAccessor* _tmp770_;
13194 BalaParameter* _tmp771_;
13195 BalaParameter* _tmp772_;
13196 BalaDataType* _tmp773_;
13197 BalaDataType* _tmp774_;
13198 BalaDataType* _tmp775_;
13199 BalaDataType* _tmp776_;
13200 gboolean _tmp777_;
13201 gboolean _tmp778_;
13202 BalaDataType* _tmp781_;
13203 _tmp770_ = acc;
13204 _tmp771_ = bala_property_accessor_get_value_parameter (_tmp770_);
13205 _tmp772_ = _tmp771_;
13206 _tmp773_ = bala_variable_get_variable_type ((BalaVariable*) _tmp772_);
13207 _tmp774_ = _tmp773_;
13208 _tmp775_ = bala_data_type_copy (_tmp774_);
13209 param_type = _tmp775_;
13210 _tmp776_ = param_type;
13211 _tmp777_ = bala_data_type_get_value_owned (_tmp776_);
13212 _tmp778_ = _tmp777_;
13213 if (!_tmp778_) {
13214 BalaDataType* _tmp779_;
13215 BalaDataType* _tmp780_;
13216 _tmp779_ = param_type;
13217 _tmp780_ = param_type;
13218 bala_data_type_set_value_owned (_tmp779_, !bala_ccode_base_module_no_implicit_copy (self, _tmp780_));
13219 }
13220 _tmp781_ = param_type;
13221 if (bala_ccode_base_module_requires_destroy (_tmp781_)) {
13222 BalaCCodeFunction* _tmp782_;
13223 BalaCCodeFunction* _tmp783_;
13224 BalaPropertyAccessor* _tmp784_;
13225 BalaParameter* _tmp785_;
13226 BalaParameter* _tmp786_;
13227 BalaCCodeExpression* _tmp787_;
13228 BalaCCodeExpression* _tmp788_;
13229 _tmp782_ = bala_ccode_base_module_get_ccode (self);
13230 _tmp783_ = _tmp782_;
13231 _tmp784_ = acc;
13232 _tmp785_ = bala_property_accessor_get_value_parameter (_tmp784_);
13233 _tmp786_ = _tmp785_;
13234 _tmp787_ = bala_ccode_base_module_destroy_parameter (self, _tmp786_);
13235 _tmp788_ = _tmp787_;
13236 bala_ccode_function_add_expression (_tmp783_, _tmp788_);
13237 _bala_ccode_node_unref0 (_tmp788_)((_tmp788_ == ((void*)0)) ? ((void*)0) : (_tmp788_ = (bala_ccode_node_unref
(_tmp788_), ((void*)0))))
;
13238 }
13239 _bala_code_node_unref0 (param_type)((param_type == ((void*)0)) ? ((void*)0) : (param_type = (bala_code_node_unref
(param_type), ((void*)0))))
;
13240 }
13241 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
13242 }
13243 }
13244 _tmp789_ = parent_block;
13245 if (_tmp789_ != NULL((void*)0)) {
13246 gint parent_block_id = 0;
13247 BalaBlock* _tmp790_;
13248 BalaCCodeFunctionCall* unref_call = NULL((void*)0);
13249 gchar* _tmp791_;
13250 gchar* _tmp792_;
13251 BalaCCodeIdentifier* _tmp793_;
13252 BalaCCodeIdentifier* _tmp794_;
13253 BalaCCodeFunctionCall* _tmp795_;
13254 BalaCCodeFunctionCall* _tmp796_;
13255 BalaCCodeFunctionCall* _tmp797_;
13256 gchar* _tmp798_;
13257 gchar* _tmp799_;
13258 BalaCCodeIdentifier* _tmp800_;
13259 BalaCCodeIdentifier* _tmp801_;
13260 gchar* _tmp802_;
13261 gchar* _tmp803_;
13262 BalaCCodeMemberAccess* _tmp804_;
13263 BalaCCodeMemberAccess* _tmp805_;
13264 BalaCCodeFunction* _tmp806_;
13265 BalaCCodeFunction* _tmp807_;
13266 BalaCCodeFunctionCall* _tmp808_;
13267 BalaCCodeFunction* _tmp809_;
13268 BalaCCodeFunction* _tmp810_;
13269 gchar* _tmp811_;
13270 gchar* _tmp812_;
13271 BalaCCodeIdentifier* _tmp813_;
13272 BalaCCodeIdentifier* _tmp814_;
13273 gchar* _tmp815_;
13274 gchar* _tmp816_;
13275 BalaCCodeMemberAccess* _tmp817_;
13276 BalaCCodeMemberAccess* _tmp818_;
13277 BalaCCodeConstant* _tmp819_;
13278 BalaCCodeConstant* _tmp820_;
13279 _tmp790_ = parent_block;
13280 parent_block_id = bala_ccode_base_module_get_block_id (self, _tmp790_);
13281 _tmp791_ = g_strdup_printf ("block%d_data_unref", parent_block_id);
13282 _tmp792_ = _tmp791_;
13283 _tmp793_ = bala_ccode_identifier_new (_tmp792_);
13284 _tmp794_ = _tmp793_;
13285 _tmp795_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp794_);
13286 _tmp796_ = _tmp795_;
13287 _bala_ccode_node_unref0 (_tmp794_)((_tmp794_ == ((void*)0)) ? ((void*)0) : (_tmp794_ = (bala_ccode_node_unref
(_tmp794_), ((void*)0))))
;
13288 _g_free0 (_tmp792_)(_tmp792_ = (g_free (_tmp792_), ((void*)0)));
13289 unref_call = _tmp796_;
13290 _tmp797_ = unref_call;
13291 _tmp798_ = g_strdup_printf ("_data%d_", block_id);
13292 _tmp799_ = _tmp798_;
13293 _tmp800_ = bala_ccode_identifier_new (_tmp799_);
13294 _tmp801_ = _tmp800_;
13295 _tmp802_ = g_strdup_printf ("_data%d_", parent_block_id);
13296 _tmp803_ = _tmp802_;
13297 _tmp804_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp801_, _tmp803_);
13298 _tmp805_ = _tmp804_;
13299 bala_ccode_function_call_add_argument (_tmp797_, (BalaCCodeExpression*) _tmp805_);
13300 _bala_ccode_node_unref0 (_tmp805_)((_tmp805_ == ((void*)0)) ? ((void*)0) : (_tmp805_ = (bala_ccode_node_unref
(_tmp805_), ((void*)0))))
;
13301 _g_free0 (_tmp803_)(_tmp803_ = (g_free (_tmp803_), ((void*)0)));
13302 _bala_ccode_node_unref0 (_tmp801_)((_tmp801_ == ((void*)0)) ? ((void*)0) : (_tmp801_ = (bala_ccode_node_unref
(_tmp801_), ((void*)0))))
;
13303 _g_free0 (_tmp799_)(_tmp799_ = (g_free (_tmp799_), ((void*)0)));
13304 _tmp806_ = bala_ccode_base_module_get_ccode (self);
13305 _tmp807_ = _tmp806_;
13306 _tmp808_ = unref_call;
13307 bala_ccode_function_add_expression (_tmp807_, (BalaCCodeExpression*) _tmp808_);
13308 _tmp809_ = bala_ccode_base_module_get_ccode (self);
13309 _tmp810_ = _tmp809_;
13310 _tmp811_ = g_strdup_printf ("_data%d_", block_id);
13311 _tmp812_ = _tmp811_;
13312 _tmp813_ = bala_ccode_identifier_new (_tmp812_);
13313 _tmp814_ = _tmp813_;
13314 _tmp815_ = g_strdup_printf ("_data%d_", parent_block_id);
13315 _tmp816_ = _tmp815_;
13316 _tmp817_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp814_, _tmp816_);
13317 _tmp818_ = _tmp817_;
13318 _tmp819_ = bala_ccode_constant_new ("NULL");
13319 _tmp820_ = _tmp819_;
13320 bala_ccode_function_add_assignment (_tmp810_, (BalaCCodeExpression*) _tmp818_, (BalaCCodeExpression*) _tmp820_);
13321 _bala_ccode_node_unref0 (_tmp820_)((_tmp820_ == ((void*)0)) ? ((void*)0) : (_tmp820_ = (bala_ccode_node_unref
(_tmp820_), ((void*)0))))
;
13322 _bala_ccode_node_unref0 (_tmp818_)((_tmp818_ == ((void*)0)) ? ((void*)0) : (_tmp818_ = (bala_ccode_node_unref
(_tmp818_), ((void*)0))))
;
13323 _g_free0 (_tmp816_)(_tmp816_ = (g_free (_tmp816_), ((void*)0)));
13324 _bala_ccode_node_unref0 (_tmp814_)((_tmp814_ == ((void*)0)) ? ((void*)0) : (_tmp814_ = (bala_ccode_node_unref
(_tmp814_), ((void*)0))))
;
13325 _g_free0 (_tmp812_)(_tmp812_ = (g_free (_tmp812_), ((void*)0)));
13326 _bala_ccode_node_unref0 (unref_call)((unref_call == ((void*)0)) ? ((void*)0) : (unref_call = (bala_ccode_node_unref
(unref_call), ((void*)0))))
;
13327 } else {
13328 BalaDataType* _tmp821_;
13329 BalaDataType* _tmp822_;
13330 BalaDataType* _tmp823_;
13331 _tmp821_ = bala_ccode_base_module_get_this_type (self);
13332 _tmp822_ = _bala_code_node_ref0 (_tmp821_);
13333 _bala_code_node_unref0 (this_type)((this_type == ((void*)0)) ? ((void*)0) : (this_type = (bala_code_node_unref
(this_type), ((void*)0))))
;
13334 this_type = _tmp822_;
13335 _tmp823_ = this_type;
13336 if (_tmp823_ != NULL((void*)0)) {
13337 BalaDataType* _tmp824_;
13338 BalaDataType* _tmp825_;
13339 BalaDataType* _tmp826_;
13340 gboolean _tmp827_ = FALSE(0);
13341 BalaDataType* _tmp828_;
13342 _tmp824_ = this_type;
13343 _tmp825_ = bala_data_type_copy (_tmp824_);
13344 _bala_code_node_unref0 (this_type)((this_type == ((void*)0)) ? ((void*)0) : (this_type = (bala_code_node_unref
(this_type), ((void*)0))))
;
13345 this_type = _tmp825_;
13346 _tmp826_ = this_type;
13347 bala_data_type_set_value_owned (_tmp826_, TRUE(!(0)));
13348 _tmp828_ = this_type;
13349 if (bala_data_type_is_disposable (_tmp828_)) {
13350 _tmp827_ = !bala_ccode_base_module_is_in_destructor (self);
13351 } else {
13352 _tmp827_ = FALSE(0);
13353 }
13354 if (_tmp827_) {
13355 BalaGLibValue* this_value = NULL((void*)0);
13356 BalaDataType* _tmp829_;
13357 BalaCCodeIdentifier* _tmp830_;
13358 BalaCCodeIdentifier* _tmp831_;
13359 BalaGLibValue* _tmp832_;
13360 BalaGLibValue* _tmp833_;
13361 BalaCCodeFunction* _tmp834_;
13362 BalaCCodeFunction* _tmp835_;
13363 BalaGLibValue* _tmp836_;
13364 BalaCCodeExpression* _tmp837_;
13365 BalaCCodeExpression* _tmp838_;
13366 _tmp829_ = this_type;
13367 _tmp830_ = bala_ccode_identifier_new ("self");
13368 _tmp831_ = _tmp830_;
13369 _tmp832_ = bala_glib_value_new (_tmp829_, (BalaCCodeExpression*) _tmp831_, TRUE(!(0)));
13370 _tmp833_ = _tmp832_;
13371 _bala_ccode_node_unref0 (_tmp831_)((_tmp831_ == ((void*)0)) ? ((void*)0) : (_tmp831_ = (bala_ccode_node_unref
(_tmp831_), ((void*)0))))
;
13372 this_value = _tmp833_;
13373 _tmp834_ = bala_ccode_base_module_get_ccode (self);
13374 _tmp835_ = _tmp834_;
13375 _tmp836_ = this_value;
13376 _tmp837_ = bala_ccode_base_module_destroy_value (self, (BalaTargetValue*) _tmp836_, FALSE(0));
13377 _tmp838_ = _tmp837_;
13378 bala_ccode_function_add_expression (_tmp835_, _tmp838_);
13379 _bala_ccode_node_unref0 (_tmp838_)((_tmp838_ == ((void*)0)) ? ((void*)0) : (_tmp838_ = (bala_ccode_node_unref
(_tmp838_), ((void*)0))))
;
13380 _bala_target_value_unref0 (this_value)((this_value == ((void*)0)) ? ((void*)0) : (this_value = (bala_target_value_unref
(this_value), ((void*)0))))
;
13381 }
13382 }
13383 }
13384 _tmp839_ = bala_ccode_identifier_new ("g_slice_free");
13385 _tmp840_ = _tmp839_;
13386 _tmp841_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp840_);
13387 _tmp842_ = _tmp841_;
13388 _bala_ccode_node_unref0 (_tmp840_)((_tmp840_ == ((void*)0)) ? ((void*)0) : (_tmp840_ = (bala_ccode_node_unref
(_tmp840_), ((void*)0))))
;
13389 data_free = _tmp842_;
13390 _tmp843_ = data_free;
13391 _tmp844_ = struct_name;
13392 _tmp845_ = bala_ccode_identifier_new (_tmp844_);
13393 _tmp846_ = _tmp845_;
13394 bala_ccode_function_call_add_argument (_tmp843_, (BalaCCodeExpression*) _tmp846_);
13395 _bala_ccode_node_unref0 (_tmp846_)((_tmp846_ == ((void*)0)) ? ((void*)0) : (_tmp846_ = (bala_ccode_node_unref
(_tmp846_), ((void*)0))))
;
13396 _tmp847_ = data_free;
13397 _tmp848_ = g_strdup_printf ("_data%d_", block_id);
13398 _tmp849_ = _tmp848_;
13399 _tmp850_ = bala_ccode_identifier_new (_tmp849_);
13400 _tmp851_ = _tmp850_;
13401 bala_ccode_function_call_add_argument (_tmp847_, (BalaCCodeExpression*) _tmp851_);
13402 _bala_ccode_node_unref0 (_tmp851_)((_tmp851_ == ((void*)0)) ? ((void*)0) : (_tmp851_ = (bala_ccode_node_unref
(_tmp851_), ((void*)0))))
;
13403 _g_free0 (_tmp849_)(_tmp849_ = (g_free (_tmp849_), ((void*)0)));
13404 _tmp852_ = bala_ccode_base_module_get_ccode (self);
13405 _tmp853_ = _tmp852_;
13406 _tmp854_ = data_free;
13407 bala_ccode_function_add_expression (_tmp853_, (BalaCCodeExpression*) _tmp854_);
13408 _tmp855_ = bala_ccode_base_module_get_ccode (self);
13409 _tmp856_ = _tmp855_;
13410 bala_ccode_function_close (_tmp856_);
13411 bala_ccode_base_module_pop_function (self);
13412 _tmp857_ = self->cfile;
13413 _tmp858_ = unref_fun;
13414 bala_ccode_file_add_function_declaration (_tmp857_, _tmp858_);
13415 _tmp859_ = self->cfile;
13416 _tmp860_ = unref_fun;
13417 bala_ccode_file_add_function (_tmp859_, _tmp860_);
13418 _bala_ccode_node_unref0 (data_free)((data_free == ((void*)0)) ? ((void*)0) : (data_free = (bala_ccode_node_unref
(data_free), ((void*)0))))
;
13419 _bala_code_node_unref0 (this_type)((this_type == ((void*)0)) ? ((void*)0) : (this_type = (bala_code_node_unref
(this_type), ((void*)0))))
;
13420 _bala_ccode_node_unref0 (outer_block)((outer_block == ((void*)0)) ? ((void*)0) : (outer_block = (bala_ccode_node_unref
(outer_block), ((void*)0))))
;
13421 _bala_ccode_node_unref0 (unref_fun)((unref_fun == ((void*)0)) ? ((void*)0) : (unref_fun = (bala_ccode_node_unref
(unref_fun), ((void*)0))))
;
13422 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
13423 _bala_ccode_node_unref0 (ref_fun)((ref_fun == ((void*)0)) ? ((void*)0) : (ref_fun = (bala_ccode_node_unref
(ref_fun), ((void*)0))))
;
13424 _bala_ccode_node_unref0 (_typedef_)((_typedef_ == ((void*)0)) ? ((void*)0) : (_typedef_ = (bala_ccode_node_unref
(_typedef_), ((void*)0))))
;
13425 _bala_ccode_node_unref0 (data_alloc)((data_alloc == ((void*)0)) ? ((void*)0) : (data_alloc = (bala_ccode_node_unref
(data_alloc), ((void*)0))))
;
13426 _bala_ccode_node_unref0 (data)((data == ((void*)0)) ? ((void*)0) : (data = (bala_ccode_node_unref
(data), ((void*)0))))
;
13427 _g_free0 (struct_name)(struct_name = (g_free (struct_name), ((void*)0)));
13428 _bala_code_node_unref0 (parent_block)((parent_block == ((void*)0)) ? ((void*)0) : (parent_block = (
bala_code_node_unref (parent_block), ((void*)0))))
;
13429 }
13430 reachable_exit_block = TRUE(!(0));
13431 {
13432 BalaList* _stmt_list = NULL((void*)0);
13433 BalaList* _tmp861_;
13434 gint _stmt_size = 0;
13435 BalaList* _tmp862_;
13436 gint _tmp863_;
13437 gint _tmp864_;
13438 gint _stmt_index = 0;
13439 _tmp861_ = bala_block_get_statements (b);
13440 _stmt_list = _tmp861_;
13441 _tmp862_ = _stmt_list;
13442 _tmp863_ = bala_collection_get_size ((BalaCollection*) _tmp862_);
13443 _tmp864_ = _tmp863_;
13444 _stmt_size = _tmp864_;
13445 _stmt_index = -1;
13446 while (TRUE(!(0))) {
13447 gint _tmp865_;
13448 gint _tmp866_;
13449 BalaStatement* stmt = NULL((void*)0);
13450 BalaList* _tmp867_;
13451 gpointer _tmp868_;
13452 BalaStatement* _tmp869_;
13453 BalaStatement* _tmp870_;
13454 BalaSourceReference* _tmp871_;
13455 BalaSourceReference* _tmp872_;
13456 BalaStatement* _tmp873_;
13457 _stmt_index = _stmt_index + 1;
13458 _tmp865_ = _stmt_index;
13459 _tmp866_ = _stmt_size;
13460 if (!(_tmp865_ < _tmp866_)) {
13461 break;
13462 }
13463 _tmp867_ = _stmt_list;
13464 _tmp868_ = bala_list_get (_tmp867_, _stmt_index);
13465 stmt = (BalaStatement*) _tmp868_;
13466 _tmp869_ = stmt;
13467 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp869_, BALA_TYPE_RETURN_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp869_); GType __t = ((bala_return_statement_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
13468 reachable_exit_block = FALSE(0);
13469 }
13470 _tmp870_ = stmt;
13471 _tmp871_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp870_);
13472 _tmp872_ = _tmp871_;
13473 bala_ccode_base_module_push_line (self, _tmp872_);
13474 _tmp873_ = stmt;
13475 bala_code_node_emit ((BalaCodeNode*) _tmp873_, (BalaCodeGenerator*) self);
13476 bala_ccode_base_module_pop_line (self);
13477 _bala_code_node_unref0 (stmt)((stmt == ((void*)0)) ? ((void*)0) : (stmt = (bala_code_node_unref
(stmt), ((void*)0))))
;
13478 }
13479 _bala_iterable_unref0 (_stmt_list)((_stmt_list == ((void*)0)) ? ((void*)0) : (_stmt_list = (bala_iterable_unref
(_stmt_list), ((void*)0))))
;
13480 }
13481 if (reachable_exit_block) {
13482 BalaSymbol* _tmp874_;
13483 BalaSymbol* _tmp875_;
13484 BalaSymbol* _tmp913_;
13485 BalaSymbol* _tmp914_;
13486 gboolean _tmp987_;
13487 gboolean _tmp988_;
13488 _tmp874_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13489 _tmp875_ = _tmp874_;
13490 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp875_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp875_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
13491 BalaMethod* m = NULL((void*)0);
13492 BalaSymbol* _tmp876_;
13493 BalaSymbol* _tmp877_;
13494 _tmp876_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13495 _tmp877_ = _tmp876_;
13496 m = G_TYPE_CHECK_INSTANCE_CAST (_tmp877_, BALA_TYPE_METHOD, BalaMethod)(((BalaMethod*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp877_), ((bala_method_get_type ())))))
;
13497 {
13498 BalaList* _postcondition_list = NULL((void*)0);
13499 BalaMethod* _tmp878_;
13500 BalaList* _tmp879_;
13501 BalaList* _tmp880_;
13502 gint _postcondition_size = 0;
13503 BalaList* _tmp881_;
13504 gint _tmp882_;
13505 gint _tmp883_;
13506 gint _postcondition_index = 0;
13507 _tmp878_ = m;
13508 _tmp879_ = bala_method_get_postconditions (_tmp878_);
13509 _tmp880_ = _bala_iterable_ref0 (_tmp879_);
13510 _postcondition_list = _tmp880_;
13511 _tmp881_ = _postcondition_list;
13512 _tmp882_ = bala_collection_get_size ((BalaCollection*) _tmp881_);
13513 _tmp883_ = _tmp882_;
13514 _postcondition_size = _tmp883_;
13515 _postcondition_index = -1;
13516 while (TRUE(!(0))) {
13517 gint _tmp884_;
13518 gint _tmp885_;
13519 BalaExpression* postcondition = NULL((void*)0);
13520 BalaList* _tmp886_;
13521 gpointer _tmp887_;
13522 BalaExpression* _tmp888_;
13523 _postcondition_index = _postcondition_index + 1;
13524 _tmp884_ = _postcondition_index;
13525 _tmp885_ = _postcondition_size;
13526 if (!(_tmp884_ < _tmp885_)) {
13527 break;
13528 }
13529 _tmp886_ = _postcondition_list;
13530 _tmp887_ = bala_list_get (_tmp886_, _postcondition_index);
13531 postcondition = (BalaExpression*) _tmp887_;
13532 _tmp888_ = postcondition;
13533 bala_ccode_base_module_create_postcondition_statement (self, _tmp888_);
13534 _bala_code_node_unref0 (postcondition)((postcondition == ((void*)0)) ? ((void*)0) : (postcondition =
(bala_code_node_unref (postcondition), ((void*)0))))
;
13535 }
13536 _bala_iterable_unref0 (_postcondition_list)((_postcondition_list == ((void*)0)) ? ((void*)0) : (_postcondition_list
= (bala_iterable_unref (_postcondition_list), ((void*)0))))
;
13537 }
13538 }
13539 {
13540 gint i = 0;
13541 BalaList* _tmp889_;
13542 gint _tmp890_;
13543 gint _tmp891_;
13544 _tmp889_ = local_vars;
13545 _tmp890_ = bala_collection_get_size ((BalaCollection*) _tmp889_);
13546 _tmp891_ = _tmp890_;
13547 i = _tmp891_ - 1;
13548 {
13549 gboolean _tmp892_ = FALSE(0);
13550 _tmp892_ = TRUE(!(0));
13551 while (TRUE(!(0))) {
13552 BalaLocalVariable* local = NULL((void*)0);
13553 BalaList* _tmp894_;
13554 gpointer _tmp895_;
13555 BalaLocalVariable* _tmp896_;
13556 gboolean _tmp897_ = FALSE(0);
13557 gboolean _tmp898_ = FALSE(0);
13558 BalaLocalVariable* _tmp899_;
13559 gboolean _tmp900_;
13560 gboolean _tmp901_;
13561 if (!_tmp892_) {
13562 gint _tmp893_;
13563 _tmp893_ = i;
13564 i = _tmp893_ - 1;
13565 }
13566 _tmp892_ = FALSE(0);
13567 if (!(i >= 0)) {
13568 break;
13569 }
13570 _tmp894_ = local_vars;
13571 _tmp895_ = bala_list_get (_tmp894_, i);
13572 local = (BalaLocalVariable*) _tmp895_;
13573 _tmp896_ = local;
13574 bala_symbol_set_active ((BalaSymbol*) _tmp896_, FALSE(0));
13575 _tmp899_ = local;
13576 _tmp900_ = bala_code_node_get_unreachable ((BalaCodeNode*) _tmp899_);
13577 _tmp901_ = _tmp900_;
13578 if (!_tmp901_) {
13579 BalaLocalVariable* _tmp902_;
13580 gboolean _tmp903_;
13581 gboolean _tmp904_;
13582 _tmp902_ = local;
13583 _tmp903_ = bala_local_variable_get_captured (_tmp902_);
13584 _tmp904_ = _tmp903_;
13585 _tmp898_ = !_tmp904_;
13586 } else {
13587 _tmp898_ = FALSE(0);
13588 }
13589 if (_tmp898_) {
13590 BalaLocalVariable* _tmp905_;
13591 BalaDataType* _tmp906_;
13592 BalaDataType* _tmp907_;
13593 _tmp905_ = local;
13594 _tmp906_ = bala_variable_get_variable_type ((BalaVariable*) _tmp905_);
13595 _tmp907_ = _tmp906_;
13596 _tmp897_ = bala_ccode_base_module_requires_destroy (_tmp907_);
13597 } else {
13598 _tmp897_ = FALSE(0);
13599 }
13600 if (_tmp897_) {
13601 BalaCCodeFunction* _tmp908_;
13602 BalaCCodeFunction* _tmp909_;
13603 BalaLocalVariable* _tmp910_;
13604 BalaCCodeExpression* _tmp911_;
13605 BalaCCodeExpression* _tmp912_;
13606 _tmp908_ = bala_ccode_base_module_get_ccode (self);
13607 _tmp909_ = _tmp908_;
13608 _tmp910_ = local;
13609 _tmp911_ = bala_ccode_base_module_destroy_local (self, _tmp910_);
13610 _tmp912_ = _tmp911_;
13611 bala_ccode_function_add_expression (_tmp909_, _tmp912_);
13612 _bala_ccode_node_unref0 (_tmp912_)((_tmp912_ == ((void*)0)) ? ((void*)0) : (_tmp912_ = (bala_ccode_node_unref
(_tmp912_), ((void*)0))))
;
13613 }
13614 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
13615 }
13616 }
13617 }
13618 _tmp913_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13619 _tmp914_ = _tmp913_;
13620 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp914_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp914_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
13621 BalaMethod* m = NULL((void*)0);
13622 BalaSymbol* _tmp915_;
13623 BalaSymbol* _tmp916_;
13624 BalaMethod* _tmp917_;
13625 _tmp915_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13626 _tmp916_ = _tmp915_;
13627 _tmp917_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp916_, BALA_TYPE_METHOD, BalaMethod)(((BalaMethod*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp916_), ((bala_method_get_type ())))))
);
13628 m = _tmp917_;
13629 {
13630 BalaList* _param_list = NULL((void*)0);
13631 BalaMethod* _tmp918_;
13632 BalaList* _tmp919_;
13633 BalaList* _tmp920_;
13634 gint _param_size = 0;
13635 BalaList* _tmp921_;
13636 gint _tmp922_;
13637 gint _tmp923_;
13638 gint _param_index = 0;
13639 _tmp918_ = m;
13640 _tmp919_ = bala_callable_get_parameters ((BalaCallable*) _tmp918_);
13641 _tmp920_ = _bala_iterable_ref0 (_tmp919_);
13642 _param_list = _tmp920_;
13643 _tmp921_ = _param_list;
13644 _tmp922_ = bala_collection_get_size ((BalaCollection*) _tmp921_);
13645 _tmp923_ = _tmp922_;
13646 _param_size = _tmp923_;
13647 _param_index = -1;
13648 while (TRUE(!(0))) {
13649 gint _tmp924_;
13650 gint _tmp925_;
13651 BalaParameter* param = NULL((void*)0);
13652 BalaList* _tmp926_;
13653 gpointer _tmp927_;
13654 gboolean _tmp928_ = FALSE(0);
13655 gboolean _tmp929_ = FALSE(0);
13656 gboolean _tmp930_ = FALSE(0);
13657 gboolean _tmp931_ = FALSE(0);
13658 BalaParameter* _tmp932_;
13659 gboolean _tmp933_;
13660 gboolean _tmp934_;
13661 _param_index = _param_index + 1;
13662 _tmp924_ = _param_index;
13663 _tmp925_ = _param_size;
13664 if (!(_tmp924_ < _tmp925_)) {
13665 break;
13666 }
13667 _tmp926_ = _param_list;
13668 _tmp927_ = bala_list_get (_tmp926_, _param_index);
13669 param = (BalaParameter*) _tmp927_;
13670 _tmp932_ = param;
13671 _tmp933_ = bala_parameter_get_captured (_tmp932_);
13672 _tmp934_ = _tmp933_;
13673 if (!_tmp934_) {
13674 BalaParameter* _tmp935_;
13675 gboolean _tmp936_;
13676 gboolean _tmp937_;
13677 _tmp935_ = param;
13678 _tmp936_ = bala_parameter_get_ellipsis (_tmp935_);
13679 _tmp937_ = _tmp936_;
13680 _tmp931_ = !_tmp937_;
13681 } else {
13682 _tmp931_ = FALSE(0);
13683 }
13684 if (_tmp931_) {
13685 BalaParameter* _tmp938_;
13686 gboolean _tmp939_;
13687 gboolean _tmp940_;
13688 _tmp938_ = param;
13689 _tmp939_ = bala_parameter_get_params_array (_tmp938_);
13690 _tmp940_ = _tmp939_;
13691 _tmp930_ = !_tmp940_;
13692 } else {
13693 _tmp930_ = FALSE(0);
13694 }
13695 if (_tmp930_) {
13696 BalaParameter* _tmp941_;
13697 BalaDataType* _tmp942_;
13698 BalaDataType* _tmp943_;
13699 _tmp941_ = param;
13700 _tmp942_ = bala_variable_get_variable_type ((BalaVariable*) _tmp941_);
13701 _tmp943_ = _tmp942_;
13702 _tmp929_ = bala_ccode_base_module_requires_destroy (_tmp943_);
13703 } else {
13704 _tmp929_ = FALSE(0);
13705 }
13706 if (_tmp929_) {
13707 BalaParameter* _tmp944_;
13708 BalaParameterDirection _tmp945_;
13709 BalaParameterDirection _tmp946_;
13710 _tmp944_ = param;
13711 _tmp945_ = bala_parameter_get_direction (_tmp944_);
13712 _tmp946_ = _tmp945_;
13713 _tmp928_ = _tmp946_ == BALA_PARAMETER_DIRECTION_IN;
13714 } else {
13715 _tmp928_ = FALSE(0);
13716 }
13717 if (_tmp928_) {
13718 BalaCCodeFunction* _tmp947_;
13719 BalaCCodeFunction* _tmp948_;
13720 BalaParameter* _tmp949_;
13721 BalaCCodeExpression* _tmp950_;
13722 BalaCCodeExpression* _tmp951_;
13723 _tmp947_ = bala_ccode_base_module_get_ccode (self);
13724 _tmp948_ = _tmp947_;
13725 _tmp949_ = param;
13726 _tmp950_ = bala_ccode_base_module_destroy_parameter (self, _tmp949_);
13727 _tmp951_ = _tmp950_;
13728 bala_ccode_function_add_expression (_tmp948_, _tmp951_);
13729 _bala_ccode_node_unref0 (_tmp951_)((_tmp951_ == ((void*)0)) ? ((void*)0) : (_tmp951_ = (bala_ccode_node_unref
(_tmp951_), ((void*)0))))
;
13730 } else {
13731 gboolean _tmp952_ = FALSE(0);
13732 BalaParameter* _tmp953_;
13733 BalaParameterDirection _tmp954_;
13734 BalaParameterDirection _tmp955_;
13735 _tmp953_ = param;
13736 _tmp954_ = bala_parameter_get_direction (_tmp953_);
13737 _tmp955_ = _tmp954_;
13738 if (_tmp955_ == BALA_PARAMETER_DIRECTION_OUT) {
13739 BalaMethod* _tmp956_;
13740 gboolean _tmp957_;
13741 gboolean _tmp958_;
13742 _tmp956_ = m;
13743 _tmp957_ = bala_method_get_coroutine (_tmp956_);
13744 _tmp958_ = _tmp957_;
13745 _tmp952_ = !_tmp958_;
13746 } else {
13747 _tmp952_ = FALSE(0);
13748 }
13749 if (_tmp952_) {
13750 BalaParameter* _tmp959_;
13751 _tmp959_ = param;
13752 bala_ccode_base_module_return_out_parameter (self, _tmp959_);
13753 }
13754 }
13755 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
13756 }
13757 _bala_iterable_unref0 (_param_list)((_param_list == ((void*)0)) ? ((void*)0) : (_param_list = (bala_iterable_unref
(_param_list), ((void*)0))))
;
13758 }
13759 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
13760 } else {
13761 BalaSymbol* _tmp960_;
13762 BalaSymbol* _tmp961_;
13763 _tmp960_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13764 _tmp961_ = _tmp960_;
13765 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp961_, BALA_TYPE_PROPERTY_ACCESSOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp961_); GType __t = ((bala_property_accessor_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
13766 BalaPropertyAccessor* acc = NULL((void*)0);
13767 BalaSymbol* _tmp962_;
13768 BalaSymbol* _tmp963_;
13769 BalaPropertyAccessor* _tmp964_;
13770 gboolean _tmp965_ = FALSE(0);
13771 gboolean _tmp966_ = FALSE(0);
13772 BalaPropertyAccessor* _tmp967_;
13773 BalaParameter* _tmp968_;
13774 BalaParameter* _tmp969_;
13775 _tmp962_ = bala_symbol_get_parent_symbol ((BalaSymbol*) b);
13776 _tmp963_ = _tmp962_;
13777 _tmp964_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp963_, BALA_TYPE_PROPERTY_ACCESSOR, BalaPropertyAccessor)(((BalaPropertyAccessor*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp963_), ((bala_property_accessor_get_type ())))))
);
13778 acc = _tmp964_;
13779 _tmp967_ = acc;
13780 _tmp968_ = bala_property_accessor_get_value_parameter (_tmp967_);
13781 _tmp969_ = _tmp968_;
13782 if (_tmp969_ != NULL((void*)0)) {
13783 BalaPropertyAccessor* _tmp970_;
13784 BalaParameter* _tmp971_;
13785 BalaParameter* _tmp972_;
13786 gboolean _tmp973_;
13787 gboolean _tmp974_;
13788 _tmp970_ = acc;
13789 _tmp971_ = bala_property_accessor_get_value_parameter (_tmp970_);
13790 _tmp972_ = _tmp971_;
13791 _tmp973_ = bala_parameter_get_captured (_tmp972_);
13792 _tmp974_ = _tmp973_;
13793 _tmp966_ = !_tmp974_;
13794 } else {
13795 _tmp966_ = FALSE(0);
13796 }
13797 if (_tmp966_) {
13798 BalaPropertyAccessor* _tmp975_;
13799 BalaParameter* _tmp976_;
13800 BalaParameter* _tmp977_;
13801 BalaDataType* _tmp978_;
13802 BalaDataType* _tmp979_;
13803 _tmp975_ = acc;
13804 _tmp976_ = bala_property_accessor_get_value_parameter (_tmp975_);
13805 _tmp977_ = _tmp976_;
13806 _tmp978_ = bala_variable_get_variable_type ((BalaVariable*) _tmp977_);
13807 _tmp979_ = _tmp978_;
13808 _tmp965_ = bala_ccode_base_module_requires_destroy (_tmp979_);
13809 } else {
13810 _tmp965_ = FALSE(0);
13811 }
13812 if (_tmp965_) {
13813 BalaCCodeFunction* _tmp980_;
13814 BalaCCodeFunction* _tmp981_;
13815 BalaPropertyAccessor* _tmp982_;
13816 BalaParameter* _tmp983_;
13817 BalaParameter* _tmp984_;
13818 BalaCCodeExpression* _tmp985_;
13819 BalaCCodeExpression* _tmp986_;
13820 _tmp980_ = bala_ccode_base_module_get_ccode (self);
13821 _tmp981_ = _tmp980_;
13822 _tmp982_ = acc;
13823 _tmp983_ = bala_property_accessor_get_value_parameter (_tmp982_);
13824 _tmp984_ = _tmp983_;
13825 _tmp985_ = bala_ccode_base_module_destroy_parameter (self, _tmp984_);
13826 _tmp986_ = _tmp985_;
13827 bala_ccode_function_add_expression (_tmp981_, _tmp986_);
13828 _bala_ccode_node_unref0 (_tmp986_)((_tmp986_ == ((void*)0)) ? ((void*)0) : (_tmp986_ = (bala_ccode_node_unref
(_tmp986_), ((void*)0))))
;
13829 }
13830 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
13831 }
13832 }
13833 _tmp987_ = bala_block_get_captured (b);
13834 _tmp988_ = _tmp987_;
13835 if (_tmp988_) {
13836 gint block_id = 0;
13837 BalaCCodeFunctionCall* data_unref = NULL((void*)0);
13838 gchar* _tmp989_;
13839 gchar* _tmp990_;
13840 BalaCCodeIdentifier* _tmp991_;
13841 BalaCCodeIdentifier* _tmp992_;
13842 BalaCCodeFunctionCall* _tmp993_;
13843 BalaCCodeFunctionCall* _tmp994_;
13844 BalaCCodeFunctionCall* _tmp995_;
13845 gchar* _tmp996_;
13846 gchar* _tmp997_;
13847 BalaCCodeExpression* _tmp998_;
13848 BalaCCodeExpression* _tmp999_;
13849 BalaCCodeFunction* _tmp1000_;
13850 BalaCCodeFunction* _tmp1001_;
13851 BalaCCodeFunctionCall* _tmp1002_;
13852 BalaCCodeFunction* _tmp1003_;
13853 BalaCCodeFunction* _tmp1004_;
13854 gchar* _tmp1005_;
13855 gchar* _tmp1006_;
13856 BalaCCodeExpression* _tmp1007_;
13857 BalaCCodeExpression* _tmp1008_;
13858 BalaCCodeConstant* _tmp1009_;
13859 BalaCCodeConstant* _tmp1010_;
13860 block_id = bala_ccode_base_module_get_block_id (self, b);
13861 _tmp989_ = g_strdup_printf ("block%d_data_unref", block_id);
13862 _tmp990_ = _tmp989_;
13863 _tmp991_ = bala_ccode_identifier_new (_tmp990_);
13864 _tmp992_ = _tmp991_;
13865 _tmp993_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp992_);
13866 _tmp994_ = _tmp993_;
13867 _bala_ccode_node_unref0 (_tmp992_)((_tmp992_ == ((void*)0)) ? ((void*)0) : (_tmp992_ = (bala_ccode_node_unref
(_tmp992_), ((void*)0))))
;
13868 _g_free0 (_tmp990_)(_tmp990_ = (g_free (_tmp990_), ((void*)0)));
13869 data_unref = _tmp994_;
13870 _tmp995_ = data_unref;
13871 _tmp996_ = g_strdup_printf ("_data%d_", block_id);
13872 _tmp997_ = _tmp996_;
13873 _tmp998_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp997_);
13874 _tmp999_ = _tmp998_;
13875 bala_ccode_function_call_add_argument (_tmp995_, _tmp999_);
13876 _bala_ccode_node_unref0 (_tmp999_)((_tmp999_ == ((void*)0)) ? ((void*)0) : (_tmp999_ = (bala_ccode_node_unref
(_tmp999_), ((void*)0))))
;
13877 _g_free0 (_tmp997_)(_tmp997_ = (g_free (_tmp997_), ((void*)0)));
13878 _tmp1000_ = bala_ccode_base_module_get_ccode (self);
13879 _tmp1001_ = _tmp1000_;
13880 _tmp1002_ = data_unref;
13881 bala_ccode_function_add_expression (_tmp1001_, (BalaCCodeExpression*) _tmp1002_);
13882 _tmp1003_ = bala_ccode_base_module_get_ccode (self);
13883 _tmp1004_ = _tmp1003_;
13884 _tmp1005_ = g_strdup_printf ("_data%d_", block_id);
13885 _tmp1006_ = _tmp1005_;
13886 _tmp1007_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp1006_);
13887 _tmp1008_ = _tmp1007_;
13888 _tmp1009_ = bala_ccode_constant_new ("NULL");
13889 _tmp1010_ = _tmp1009_;
13890 bala_ccode_function_add_assignment (_tmp1004_, _tmp1008_, (BalaCCodeExpression*) _tmp1010_);
13891 _bala_ccode_node_unref0 (_tmp1010_)((_tmp1010_ == ((void*)0)) ? ((void*)0) : (_tmp1010_ = (bala_ccode_node_unref
(_tmp1010_), ((void*)0))))
;
13892 _bala_ccode_node_unref0 (_tmp1008_)((_tmp1008_ == ((void*)0)) ? ((void*)0) : (_tmp1008_ = (bala_ccode_node_unref
(_tmp1008_), ((void*)0))))
;
13893 _g_free0 (_tmp1006_)(_tmp1006_ = (g_free (_tmp1006_), ((void*)0)));
13894 _bala_ccode_node_unref0 (data_unref)((data_unref == ((void*)0)) ? ((void*)0) : (data_unref = (bala_ccode_node_unref
(data_unref), ((void*)0))))
;
13895 }
13896 }
13897 _tmp1013_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
13898 _tmp1014_ = _tmp1013_;
13899 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1014_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1014_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
13900 _tmp1012_ = TRUE(!(0));
13901 } else {
13902 BalaCodeNode* _tmp1015_;
13903 BalaCodeNode* _tmp1016_;
13904 _tmp1015_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
13905 _tmp1016_ = _tmp1015_;
13906 _tmp1012_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1016_, BALA_TYPE_SWITCH_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1016_); GType __t = ((bala_switch_statement_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
;
13907 }
13908 if (_tmp1012_) {
13909 _tmp1011_ = TRUE(!(0));
13910 } else {
13911 BalaCodeNode* _tmp1017_;
13912 BalaCodeNode* _tmp1018_;
13913 _tmp1017_ = bala_code_node_get_parent_node ((BalaCodeNode*) b);
13914 _tmp1018_ = _tmp1017_;
13915 _tmp1011_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1018_, BALA_TYPE_TRY_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1018_); GType __t = ((bala_try_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
13916 }
13917 if (_tmp1011_) {
13918 BalaCCodeFunction* _tmp1019_;
13919 BalaCCodeFunction* _tmp1020_;
13920 _tmp1019_ = bala_ccode_base_module_get_ccode (self);
13921 _tmp1020_ = _tmp1019_;
13922 bala_ccode_function_close (_tmp1020_);
13923 }
13924 _tmp1021_ = self->emit_context;
13925 bala_ccode_base_module_emit_context_pop_symbol (_tmp1021_);
13926 _bala_iterable_unref0 (local_vars)((local_vars == ((void*)0)) ? ((void*)0) : (local_vars = (bala_iterable_unref
(local_vars), ((void*)0))))
;
13927}
13928
13929static void
13930bala_ccode_base_module_real_visit_declaration_statement (BalaCodeVisitor* base,
13931 BalaDeclarationStatement* stmt)
13932{
13933 BalaCCodeBaseModule * self;
13934 BalaSymbol* _tmp0_;
13935 BalaSymbol* _tmp1_;
13936 self = (BalaCCodeBaseModule*) base;
13937 g_return_if_fail (stmt != NULL)do { if ((stmt != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "stmt != NULL"
); return; } } while (0)
;
13938 _tmp0_ = bala_declaration_statement_get_declaration (stmt);
13939 _tmp1_ = _tmp0_;
13940 bala_code_node_accept ((BalaCodeNode*) _tmp1_, (BalaCodeVisitor*) self);
13941}
13942
13943BalaCCodeExpression*
13944bala_ccode_base_module_get_cexpression (BalaCCodeBaseModule* self,
13945 const gchar* name)
13946{
13947 BalaCCodeExpression* result = NULL((void*)0);
13948 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
13949 g_return_val_if_fail (name != NULL, NULL)do { if ((name != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "name != NULL"
); return (((void*)0)); } } while (0)
;
13950 if (bala_ccode_base_module_is_in_coroutine (self)) {
13951 BalaCCodeIdentifier* _tmp0_;
13952 BalaCCodeIdentifier* _tmp1_;
13953 BalaCCodeMemberAccess* _tmp2_;
13954 BalaCCodeExpression* _tmp3_;
13955 _tmp0_ = bala_ccode_identifier_new ("_data_");
13956 _tmp1_ = _tmp0_;
13957 _tmp2_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp1_, name);
13958 _tmp3_ = (BalaCCodeExpression*) _tmp2_;
13959 _bala_ccode_node_unref0 (_tmp1_)((_tmp1_ == ((void*)0)) ? ((void*)0) : (_tmp1_ = (bala_ccode_node_unref
(_tmp1_), ((void*)0))))
;
13960 result = _tmp3_;
13961 return result;
13962 } else {
13963 BalaCCodeIdentifier* _tmp4_;
13964 _tmp4_ = bala_ccode_identifier_new (name);
13965 result = (BalaCCodeExpression*) _tmp4_;
13966 return result;
13967 }
13968}
13969
13970BalaCCodeExpression*
13971bala_ccode_base_module_get_local_cexpression (BalaCCodeBaseModule* self,
13972 BalaLocalVariable* local)
13973{
13974 gchar* _tmp0_;
13975 gchar* _tmp1_;
13976 BalaCCodeExpression* _tmp2_;
13977 BalaCCodeExpression* _tmp3_;
13978 BalaCCodeExpression* result = NULL((void*)0);
13979 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
13980 g_return_val_if_fail (local != NULL, NULL)do { if ((local != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "local != NULL"
); return (((void*)0)); } } while (0)
;
13981 _tmp0_ = bala_ccode_base_module_get_local_cname (self, local);
13982 _tmp1_ = _tmp0_;
13983 _tmp2_ = bala_ccode_base_module_get_cexpression (self, _tmp1_);
13984 _tmp3_ = _tmp2_;
13985 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
13986 result = _tmp3_;
13987 return result;
13988}
13989
13990BalaCCodeExpression*
13991bala_ccode_base_module_get_parameter_cexpression (BalaCCodeBaseModule* self,
13992 BalaParameter* param)
13993{
13994 gchar* _tmp0_;
13995 gchar* _tmp1_;
13996 BalaCCodeExpression* _tmp2_;
13997 BalaCCodeExpression* _tmp3_;
13998 BalaCCodeExpression* result = NULL((void*)0);
13999 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
14000 g_return_val_if_fail (param != NULL, NULL)do { if ((param != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "param != NULL"
); return (((void*)0)); } } while (0)
;
14001 _tmp0_ = bala_get_ccode_name ((BalaCodeNode*) param);
14002 _tmp1_ = _tmp0_;
14003 _tmp2_ = bala_ccode_base_module_get_cexpression (self, _tmp1_);
14004 _tmp3_ = _tmp2_;
14005 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
14006 result = _tmp3_;
14007 return result;
14008}
14009
14010BalaCCodeExpression*
14011bala_ccode_base_module_get_variable_cexpression (BalaCCodeBaseModule* self,
14012 const gchar* name)
14013{
14014 gchar* _tmp0_;
14015 gchar* _tmp1_;
14016 BalaCCodeExpression* _tmp2_;
14017 BalaCCodeExpression* _tmp3_;
14018 BalaCCodeExpression* result = NULL((void*)0);
14019 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
14020 g_return_val_if_fail (name != NULL, NULL)do { if ((name != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "name != NULL"
); return (((void*)0)); } } while (0)
;
14021 _tmp0_ = bala_ccode_base_module_get_variable_cname (self, name);
14022 _tmp1_ = _tmp0_;
14023 _tmp2_ = bala_ccode_base_module_get_cexpression (self, _tmp1_);
14024 _tmp3_ = _tmp2_;
14025 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
14026 result = _tmp3_;
14027 return result;
14028}
14029
14030BalaCCodeExpression*
14031bala_ccode_base_module_get_this_cexpression (BalaCCodeBaseModule* self)
14032{
14033 BalaCCodeExpression* _tmp0_;
14034 BalaCCodeExpression* result = NULL((void*)0);
14035 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
14036 _tmp0_ = bala_ccode_base_module_get_cexpression (self, "self");
14037 result = _tmp0_;
14038 return result;
14039}
14040
14041BalaCCodeExpression*
14042bala_ccode_base_module_get_this_interface_cexpression (BalaCCodeBaseModule* self,
14043 BalaInterface* iface)
14044{
14045 BalaClass* _tmp0_;
14046 BalaClass* _tmp1_;
14047 BalaClass* _tmp12_;
14048 BalaClass* _tmp13_;
14049 BalaCCodeFunctionCall* vcast = NULL((void*)0);
14050 BalaCCodeIdentifier* _tmp26_;
14051 BalaCCodeIdentifier* _tmp27_;
14052 BalaCCodeFunctionCall* _tmp28_;
14053 BalaCCodeFunctionCall* _tmp29_;
14054 BalaCCodeFunctionCall* _tmp30_;
14055 BalaCCodeExpression* _tmp31_;
14056 BalaCCodeExpression* _tmp32_;
14057 BalaCCodeFunctionCall* _tmp33_;
14058 gchar* _tmp34_;
14059 gchar* _tmp35_;
14060 BalaCCodeIdentifier* _tmp36_;
14061 BalaCCodeIdentifier* _tmp37_;
14062 BalaCCodeFunctionCall* _tmp38_;
14063 gchar* _tmp39_;
14064 gchar* _tmp40_;
14065 BalaCCodeIdentifier* _tmp41_;
14066 BalaCCodeIdentifier* _tmp42_;
14067 BalaCCodeExpression* result = NULL((void*)0);
14068 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
14069 g_return_val_if_fail (iface != NULL, NULL)do { if ((iface != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "iface != NULL"
); return (((void*)0)); } } while (0)
;
14070 _tmp0_ = bala_ccode_base_module_get_current_class (self);
14071 _tmp1_ = _tmp0_;
14072 if (bala_class_implements (_tmp1_, iface)) {
14073 BalaClass* _tmp2_;
14074 BalaClass* _tmp3_;
14075 gchar* _tmp4_;
14076 gchar* _tmp5_;
14077 gchar* _tmp6_;
14078 gchar* _tmp7_;
14079 gchar* _tmp8_;
14080 gchar* _tmp9_;
14081 BalaCCodeIdentifier* _tmp10_;
14082 BalaCCodeExpression* _tmp11_;
14083 _tmp2_ = bala_ccode_base_module_get_current_class (self);
14084 _tmp3_ = _tmp2_;
14085 _tmp4_ = bala_get_ccode_lower_case_name ((BalaCodeNode*) _tmp3_, NULL((void*)0));
14086 _tmp5_ = _tmp4_;
14087 _tmp6_ = bala_get_ccode_lower_case_name ((BalaCodeNode*) iface, NULL((void*)0));
14088 _tmp7_ = _tmp6_;
14089 _tmp8_ = g_strdup_printf ("%s_%s_parent_iface", _tmp5_, _tmp7_);
14090 _tmp9_ = _tmp8_;
14091 _tmp10_ = bala_ccode_identifier_new (_tmp9_);
14092 _tmp11_ = (BalaCCodeExpression*) _tmp10_;
14093 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
14094 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
14095 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
14096 result = _tmp11_;
14097 return result;
14098 }
14099 _tmp12_ = bala_ccode_base_module_get_current_class (self);
14100 _tmp13_ = _tmp12_;
14101 if (!bala_class_is_a (_tmp13_, (BalaObjectTypeSymbol*) iface)) {
14102 BalaClass* _tmp14_;
14103 BalaClass* _tmp15_;
14104 BalaSourceReference* _tmp16_;
14105 BalaSourceReference* _tmp17_;
14106 BalaClass* _tmp18_;
14107 BalaClass* _tmp19_;
14108 gchar* _tmp20_;
14109 gchar* _tmp21_;
14110 gchar* _tmp22_;
14111 gchar* _tmp23_;
14112 gchar* _tmp24_;
14113 gchar* _tmp25_;
14114 _tmp14_ = bala_ccode_base_module_get_current_class (self);
14115 _tmp15_ = _tmp14_;
14116 _tmp16_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp15_);
14117 _tmp17_ = _tmp16_;
14118 _tmp18_ = bala_ccode_base_module_get_current_class (self);
14119 _tmp19_ = _tmp18_;
14120 _tmp20_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp19_);
14121 _tmp21_ = _tmp20_;
14122 _tmp22_ = bala_symbol_get_full_name ((BalaSymbol*) iface);
14123 _tmp23_ = _tmp22_;
14124 _tmp24_ = g_strdup_printf ("internal: `%s' is not a `%s'", _tmp21_, _tmp23_);
14125 _tmp25_ = _tmp24_;
14126 bala_report_warning (_tmp17_, _tmp25_);
14127 _g_free0 (_tmp25_)(_tmp25_ = (g_free (_tmp25_), ((void*)0)));
14128 _g_free0 (_tmp23_)(_tmp23_ = (g_free (_tmp23_), ((void*)0)));
14129 _g_free0 (_tmp21_)(_tmp21_ = (g_free (_tmp21_), ((void*)0)));
14130 }
14131 _tmp26_ = bala_ccode_identifier_new ("G_TYPE_INSTANCE_GET_INTERFACE");
14132 _tmp27_ = _tmp26_;
14133 _tmp28_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp27_);
14134 _tmp29_ = _tmp28_;
14135 _bala_ccode_node_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_ccode_node_unref
(_tmp27_), ((void*)0))))
;
14136 vcast = _tmp29_;
14137 _tmp30_ = vcast;
14138 _tmp31_ = bala_ccode_base_module_get_this_cexpression (self);
14139 _tmp32_ = _tmp31_;
14140 bala_ccode_function_call_add_argument (_tmp30_, _tmp32_);
14141 _bala_ccode_node_unref0 (_tmp32_)((_tmp32_ == ((void*)0)) ? ((void*)0) : (_tmp32_ = (bala_ccode_node_unref
(_tmp32_), ((void*)0))))
;
14142 _tmp33_ = vcast;
14143 _tmp34_ = bala_get_ccode_type_id ((BalaCodeNode*) iface);
14144 _tmp35_ = _tmp34_;
14145 _tmp36_ = bala_ccode_identifier_new (_tmp35_);
14146 _tmp37_ = _tmp36_;
14147 bala_ccode_function_call_add_argument (_tmp33_, (BalaCCodeExpression*) _tmp37_);
14148 _bala_ccode_node_unref0 (_tmp37_)((_tmp37_ == ((void*)0)) ? ((void*)0) : (_tmp37_ = (bala_ccode_node_unref
(_tmp37_), ((void*)0))))
;
14149 _g_free0 (_tmp35_)(_tmp35_ = (g_free (_tmp35_), ((void*)0)));
14150 _tmp38_ = vcast;
14151 _tmp39_ = bala_get_ccode_type_name ((BalaObjectTypeSymbol*) iface);
14152 _tmp40_ = _tmp39_;
14153 _tmp41_ = bala_ccode_identifier_new (_tmp40_);
14154 _tmp42_ = _tmp41_;
14155 bala_ccode_function_call_add_argument (_tmp38_, (BalaCCodeExpression*) _tmp42_);
14156 _bala_ccode_node_unref0 (_tmp42_)((_tmp42_ == ((void*)0)) ? ((void*)0) : (_tmp42_ = (bala_ccode_node_unref
(_tmp42_), ((void*)0))))
;
14157 _g_free0 (_tmp40_)(_tmp40_ = (g_free (_tmp40_), ((void*)0)));
14158 result = (BalaCCodeExpression*) vcast;
14159 return result;
14160}
14161
14162BalaCCodeExpression*
14163bala_ccode_base_module_get_inner_error_cexpression (BalaCCodeBaseModule* self)
14164{
14165 gint _tmp0_;
14166 gint _tmp1_;
14167 gchar* _tmp2_;
14168 gchar* _tmp3_;
14169 BalaCCodeExpression* _tmp4_;
14170 BalaCCodeExpression* _tmp5_;
14171 BalaCCodeExpression* result = NULL((void*)0);
14172 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
14173 _tmp0_ = bala_ccode_base_module_get_current_inner_error_id (self);
14174 _tmp1_ = _tmp0_;
14175 _tmp2_ = g_strdup_printf ("_inner_error%d_", _tmp1_);
14176 _tmp3_ = _tmp2_;
14177 _tmp4_ = bala_ccode_base_module_get_cexpression (self, _tmp3_);
14178 _tmp5_ = _tmp4_;
14179 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
14180 result = _tmp5_;
14181 return result;
14182}
14183
14184static gchar
14185string_get (const gchar* self,
14186 glong index)
14187{
14188 gchar _tmp0_;
14189 gchar result = '\0';
14190 g_return_val_if_fail (self != NULL, '\0')do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ('\0'); } } while (0)
;
14191 _tmp0_ = ((gchar*) self)[index];
14192 result = _tmp0_;
14193 return result;
14194}
14195
14196gchar*
14197bala_ccode_base_module_get_local_cname (BalaCCodeBaseModule* self,
14198 BalaLocalVariable* local)
14199{
14200 gchar* cname = NULL((void*)0);
14201 const gchar* _tmp0_;
14202 const gchar* _tmp1_;
14203 gchar* _tmp2_;
14204 const gchar* _tmp3_;
14205 gchar* result = NULL((void*)0);
14206 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
14207 g_return_val_if_fail (local != NULL, NULL)do { if ((local != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "local != NULL"
); return (((void*)0)); } } while (0)
;
14208 _tmp0_ = bala_symbol_get_name ((BalaSymbol*) local);
14209 _tmp1_ = _tmp0_;
14210 _tmp2_ = bala_ccode_base_module_get_variable_cname (self, _tmp1_);
14211 cname = _tmp2_;
14212 _tmp3_ = cname;
14213 if (g_ascii_isdigit (string_get (_tmp3_, (glong) 0))((g_ascii_table[(guchar) (string_get (_tmp3_, (glong) 0))] &
G_ASCII_DIGIT) != 0)
) {
14214 const gchar* _tmp4_;
14215 gchar* _tmp5_;
14216 _tmp4_ = cname;
14217 _tmp5_ = g_strdup_printf ("_%s_", _tmp4_);
14218 _g_free0 (cname)(cname = (g_free (cname), ((void*)0)));
14219 cname = _tmp5_;
14220 }
14221 if (bala_ccode_base_module_is_in_coroutine (self)) {
14222 gint clash_index = 0;
14223 BalaCCodeBaseModuleEmitContext* _tmp6_;
14224 BalaMap* _tmp7_;
14225 gpointer _tmp8_;
14226 _tmp6_ = self->emit_context;
14227 _tmp7_ = _tmp6_->closure_variable_clash_map;
14228 _tmp8_ = bala_map_get (_tmp7_, local);
14229 clash_index = (gint) ((gintptr) _tmp8_);
14230 if (clash_index > 0) {
14231 const gchar* _tmp9_;
14232 gchar* _tmp10_;
14233 _tmp9_ = cname;
14234 _tmp10_ = g_strdup_printf ("_bala%d_%s", clash_index, _tmp9_);
14235 _g_free0 (cname)(cname = (g_free (cname), ((void*)0)));
14236 cname = _tmp10_;
14237 }
14238 }
14239 result = cname;
14240 return result;
14241}
14242
14243gchar*
14244bala_ccode_base_module_get_variable_cname (BalaCCodeBaseModule* self,
14245 const gchar* name)
14246{
14247 gchar* result = NULL((void*)0);
14248 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
14249 g_return_val_if_fail (name != NULL, NULL)do { if ((name != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "name != NULL"
); return (((void*)0)); } } while (0)
;
14250 if (string_get (name, (glong) 0) == '.') {
14251 BalaMap* _tmp1_;
14252 BalaMap* _tmp2_;
14253 BalaMap* _tmp11_;
14254 BalaMap* _tmp12_;
14255 gpointer _tmp13_;
14256 if (g_strcmp0 (name, ".result") == 0) {
14257 gchar* _tmp0_;
14258 _tmp0_ = g_strdup ("result");
14259 result = _tmp0_;
14260 return result;
14261 }
14262 _tmp1_ = bala_ccode_base_module_get_variable_name_map (self);
14263 _tmp2_ = _tmp1_;
14264 if (!bala_map_contains (_tmp2_, name)) {
14265 BalaMap* _tmp3_;
14266 BalaMap* _tmp4_;
14267 gint _tmp5_;
14268 gint _tmp6_;
14269 gchar* _tmp7_;
14270 gchar* _tmp8_;
14271 gint _tmp9_;
14272 gint _tmp10_;
14273 _tmp3_ = bala_ccode_base_module_get_variable_name_map (self);
14274 _tmp4_ = _tmp3_;
14275 _tmp5_ = bala_ccode_base_module_get_next_temp_var_id (self);
14276 _tmp6_ = _tmp5_;
14277 _tmp7_ = g_strdup_printf ("_tmp%d_", _tmp6_);
14278 _tmp8_ = _tmp7_;
14279 bala_map_set (_tmp4_, name, _tmp8_);
14280 _g_free0 (_tmp8_)(_tmp8_ = (g_free (_tmp8_), ((void*)0)));
14281 _tmp9_ = bala_ccode_base_module_get_next_temp_var_id (self);
14282 _tmp10_ = _tmp9_;
14283 bala_ccode_base_module_set_next_temp_var_id (self, _tmp10_ + 1);
14284 }
14285 _tmp11_ = bala_ccode_base_module_get_variable_name_map (self);
14286 _tmp12_ = _tmp11_;
14287 _tmp13_ = bala_map_get (_tmp12_, name);
14288 result = (gchar*) _tmp13_;
14289 return result;
14290 } else {
14291 BalaSet* _tmp14_;
14292 _tmp14_ = bala_ccode_base_module_reserved_identifiers;
14293 if (bala_collection_contains ((BalaCollection*) _tmp14_, name)) {
14294 gchar* _tmp15_;
14295 _tmp15_ = g_strdup_printf ("_%s_", name);
14296 result = _tmp15_;
14297 return result;
14298 } else {
14299 gchar* _tmp16_;
14300 _tmp16_ = g_strdup (name);
14301 result = _tmp16_;
14302 return result;
14303 }
14304 }
14305}
14306
14307gboolean
14308bala_ccode_base_module_is_simple_struct_creation (BalaCCodeBaseModule* self,
14309 BalaVariable* variable,
14310 BalaExpression* expr)
14311{
14312 BalaStruct* st = NULL((void*)0);
14313 BalaDataType* _tmp0_;
14314 BalaDataType* _tmp1_;
14315 BalaTypeSymbol* _tmp2_;
14316 BalaTypeSymbol* _tmp3_;
14317 BalaObjectCreationExpression* creation = NULL((void*)0);
14318 BalaObjectCreationExpression* _tmp4_;
14319 gboolean _tmp5_ = FALSE(0);
14320 gboolean _tmp6_ = FALSE(0);
14321 gboolean _tmp7_ = FALSE(0);
14322 gboolean _tmp8_ = FALSE(0);
14323 gboolean _tmp9_ = FALSE(0);
14324 BalaObjectCreationExpression* _tmp10_;
14325 gboolean result = FALSE(0);
14326 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
14327 g_return_val_if_fail (variable != NULL, FALSE)do { if ((variable != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "variable != NULL"
); return ((0)); } } while (0)
;
14328 g_return_val_if_fail (expr != NULL, FALSE)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return ((0)); } } while (0)
;
14329 _tmp0_ = bala_variable_get_variable_type (variable);
14330 _tmp1_ = _tmp0_;
14331 _tmp2_ = bala_data_type_get_type_symbol (_tmp1_);
14332 _tmp3_ = _tmp2_;
14333 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp3_) : NULL((void*)0);
14334 _tmp4_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (expr, BALA_TYPE_OBJECT_CREATION_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
expr); GType __t = ((bala_object_creation_expression_get_type
())); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
? ((BalaObjectCreationExpression*) expr) : NULL((void*)0));
14335 creation = _tmp4_;
14336 _tmp10_ = creation;
14337 if (_tmp10_ != NULL((void*)0)) {
14338 BalaStruct* _tmp11_;
14339 _tmp11_ = st;
14340 _tmp9_ = _tmp11_ != NULL((void*)0);
14341 } else {
14342 _tmp9_ = FALSE(0);
14343 }
14344 if (_tmp9_) {
14345 gboolean _tmp12_ = FALSE(0);
14346 BalaStruct* _tmp13_;
14347 _tmp13_ = st;
14348 if (!bala_struct_is_simple_type (_tmp13_)) {
14349 _tmp12_ = TRUE(!(0));
14350 } else {
14351 BalaStruct* _tmp14_;
14352 gchar* _tmp15_;
14353 gchar* _tmp16_;
14354 _tmp14_ = st;
14355 _tmp15_ = bala_get_ccode_name ((BalaCodeNode*) _tmp14_);
14356 _tmp16_ = _tmp15_;
14357 _tmp12_ = g_strcmp0 (_tmp16_, "va_list") == 0;
14358 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
14359 }
14360 _tmp8_ = _tmp12_;
14361 } else {
14362 _tmp8_ = FALSE(0);
14363 }
14364 if (_tmp8_) {
14365 BalaDataType* _tmp17_;
14366 BalaDataType* _tmp18_;
14367 gboolean _tmp19_;
14368 gboolean _tmp20_;
14369 _tmp17_ = bala_variable_get_variable_type (variable);
14370 _tmp18_ = _tmp17_;
14371 _tmp19_ = bala_data_type_get_nullable (_tmp18_);
14372 _tmp20_ = _tmp19_;
14373 _tmp7_ = !_tmp20_;
14374 } else {
14375 _tmp7_ = FALSE(0);
14376 }
14377 if (_tmp7_) {
14378 BalaDataType* _tmp21_;
14379 BalaDataType* _tmp22_;
14380 BalaTypeSymbol* _tmp23_;
14381 BalaTypeSymbol* _tmp24_;
14382 BalaStruct* _tmp25_;
14383 _tmp21_ = bala_variable_get_variable_type (variable);
14384 _tmp22_ = _tmp21_;
14385 _tmp23_ = bala_data_type_get_type_symbol (_tmp22_);
14386 _tmp24_ = _tmp23_;
14387 _tmp25_ = self->gvalue_type;
14388 _tmp6_ = _tmp24_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp25_), ((bala_typesymbol_get_type ())))))
;
14389 } else {
14390 _tmp6_ = FALSE(0);
14391 }
14392 if (_tmp6_) {
14393 BalaObjectCreationExpression* _tmp26_;
14394 BalaList* _tmp27_;
14395 gint _tmp28_;
14396 gint _tmp29_;
14397 _tmp26_ = creation;
14398 _tmp27_ = bala_object_creation_expression_get_object_initializer (_tmp26_);
14399 _tmp28_ = bala_collection_get_size ((BalaCollection*) _tmp27_);
14400 _tmp29_ = _tmp28_;
14401 _tmp5_ = _tmp29_ == 0;
14402 } else {
14403 _tmp5_ = FALSE(0);
14404 }
14405 if (_tmp5_) {
14406 result = TRUE(!(0));
14407 _bala_code_node_unref0 (creation)((creation == ((void*)0)) ? ((void*)0) : (creation = (bala_code_node_unref
(creation), ((void*)0))))
;
14408 return result;
14409 } else {
14410 result = FALSE(0);
14411 _bala_code_node_unref0 (creation)((creation == ((void*)0)) ? ((void*)0) : (creation = (bala_code_node_unref
(creation), ((void*)0))))
;
14412 return result;
14413 }
14414 _bala_code_node_unref0 (creation)((creation == ((void*)0)) ? ((void*)0) : (creation = (bala_code_node_unref
(creation), ((void*)0))))
;
14415}
14416
14417static gboolean
14418bala_ccode_base_module_is_foreach_element_variable (BalaLocalVariable* local)
14419{
14420 BalaSymbol* block = NULL((void*)0);
14421 BalaSymbol* _tmp0_;
14422 BalaSymbol* _tmp1_;
14423 BalaSymbol* _tmp2_;
14424 BalaSymbol* _tmp3_;
14425 gboolean result = FALSE(0);
14426 g_return_val_if_fail (local != NULL, FALSE)do { if ((local != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "local != NULL"
); return ((0)); } } while (0)
;
14427 _tmp0_ = bala_symbol_get_parent_symbol ((BalaSymbol*) local);
14428 _tmp1_ = _tmp0_;
14429 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
14430 block = _tmp2_;
14431 _tmp3_ = block;
14432 if (_tmp3_ != NULL((void*)0)) {
14433 BalaForeachStatement* stmt = NULL((void*)0);
14434 BalaSymbol* _tmp4_;
14435 BalaSymbol* _tmp5_;
14436 BalaSymbol* _tmp6_;
14437 BalaForeachStatement* _tmp7_;
14438 gboolean _tmp8_ = FALSE(0);
14439 gboolean _tmp9_ = FALSE(0);
14440 BalaForeachStatement* _tmp10_;
14441 _tmp4_ = block;
14442 _tmp5_ = bala_symbol_get_parent_symbol (_tmp4_);
14443 _tmp6_ = _tmp5_;
14444 _tmp7_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, BALA_TYPE_FOREACH_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp6_); GType __t = ((bala_foreach_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaForeachStatement*) _tmp6_) : NULL((void*)0));
14445 stmt = _tmp7_;
14446 _tmp10_ = stmt;
14447 if (_tmp10_ != NULL((void*)0)) {
14448 BalaForeachStatement* _tmp11_;
14449 gboolean _tmp12_;
14450 gboolean _tmp13_;
14451 _tmp11_ = stmt;
14452 _tmp12_ = bala_foreach_statement_get_use_iterator (_tmp11_);
14453 _tmp13_ = _tmp12_;
14454 _tmp9_ = !_tmp13_;
14455 } else {
14456 _tmp9_ = FALSE(0);
14457 }
14458 if (_tmp9_) {
14459 BalaForeachStatement* _tmp14_;
14460 BalaLocalVariable* _tmp15_;
14461 BalaLocalVariable* _tmp16_;
14462 _tmp14_ = stmt;
14463 _tmp15_ = bala_foreach_statement_get_element_variable (_tmp14_);
14464 _tmp16_ = _tmp15_;
14465 _tmp8_ = _tmp16_ == local;
14466 } else {
14467 _tmp8_ = FALSE(0);
14468 }
14469 if (_tmp8_) {
14470 result = TRUE(!(0));
14471 _bala_code_node_unref0 (stmt)((stmt == ((void*)0)) ? ((void*)0) : (stmt = (bala_code_node_unref
(stmt), ((void*)0))))
;
14472 _bala_code_node_unref0 (block)((block == ((void*)0)) ? ((void*)0) : (block = (bala_code_node_unref
(block), ((void*)0))))
;
14473 return result;
14474 }
14475 _bala_code_node_unref0 (stmt)((stmt == ((void*)0)) ? ((void*)0) : (stmt = (bala_code_node_unref
(stmt), ((void*)0))))
;
14476 }
14477 result = FALSE(0);
14478 _bala_code_node_unref0 (block)((block == ((void*)0)) ? ((void*)0) : (block = (bala_code_node_unref
(block), ((void*)0))))
;
14479 return result;
14480}
14481
14482static void
14483bala_ccode_base_module_real_visit_local_variable (BalaCodeVisitor* base,
14484 BalaLocalVariable* local)
14485{
14486 BalaCCodeBaseModule * self;
14487 BalaDataType* _tmp0_;
14488 BalaDataType* _tmp1_;
14489 BalaCCodeFile* _tmp2_;
14490 gboolean _tmp3_ = FALSE(0);
14491 gboolean _tmp4_;
14492 gboolean _tmp5_;
14493 gboolean declared = FALSE(0);
14494 BalaExpression* _tmp73_;
14495 BalaExpression* _tmp74_;
14496 BalaCCodeExpression* rhs = NULL((void*)0);
14497 gboolean _tmp79_ = FALSE(0);
14498 BalaExpression* _tmp80_;
14499 BalaExpression* _tmp81_;
14500 BalaCCodeExpression* _tmp172_;
14501 gboolean _tmp181_ = FALSE(0);
14502 BalaExpression* _tmp182_;
14503 BalaExpression* _tmp183_;
14504 self = (BalaCCodeBaseModule*) base;
14505 g_return_if_fail (local != NULL)do { if ((local != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "local != NULL"
); return; } } while (0)
;
14506 _tmp0_ = bala_variable_get_variable_type ((BalaVariable*) local);
14507 _tmp1_ = _tmp0_;
14508 _tmp2_ = self->cfile;
14509 bala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
14510 _tmp4_ = bala_local_variable_get_captured (local);
14511 _tmp5_ = _tmp4_;
14512 if (!_tmp5_) {
14513 _tmp3_ = TRUE(!(0));
14514 } else {
14515 _tmp3_ = bala_ccode_base_module_is_foreach_element_variable (local);
14516 }
14517 declared = _tmp3_;
14518 if (declared) {
14519 if (bala_ccode_base_module_is_in_coroutine (self)) {
14520 gint count = 0;
14521 BalaCCodeBaseModuleEmitContext* _tmp6_;
14522 BalaMap* _tmp7_;
14523 const gchar* _tmp8_;
14524 const gchar* _tmp9_;
14525 gpointer _tmp10_;
14526 BalaCCodeBaseModuleEmitContext* _tmp13_;
14527 BalaMap* _tmp14_;
14528 const gchar* _tmp15_;
14529 const gchar* _tmp16_;
14530 BalaCCodeStruct* _tmp17_;
14531 BalaDataType* _tmp18_;
14532 BalaDataType* _tmp19_;
14533 gchar* _tmp20_;
14534 gchar* _tmp21_;
14535 gchar* _tmp22_;
14536 gchar* _tmp23_;
14537 BalaDataType* _tmp24_;
14538 BalaDataType* _tmp25_;
14539 BalaCCodeDeclaratorSuffix* _tmp26_;
14540 BalaCCodeDeclaratorSuffix* _tmp27_;
14541 _tmp6_ = self->emit_context;
14542 _tmp7_ = _tmp6_->closure_variable_count_map;
14543 _tmp8_ = bala_symbol_get_name ((BalaSymbol*) local);
14544 _tmp9_ = _tmp8_;
14545 _tmp10_ = bala_map_get (_tmp7_, _tmp9_);
14546 count = (gint) ((gintptr) _tmp10_);
14547 if (count > 0) {
14548 BalaCCodeBaseModuleEmitContext* _tmp11_;
14549 BalaMap* _tmp12_;
14550 _tmp11_ = self->emit_context;
14551 _tmp12_ = _tmp11_->closure_variable_clash_map;
14552 bala_map_set (_tmp12_, local, (gpointer) ((gintptr) count));
14553 }
14554 _tmp13_ = self->emit_context;
14555 _tmp14_ = _tmp13_->closure_variable_count_map;
14556 _tmp15_ = bala_symbol_get_name ((BalaSymbol*) local);
14557 _tmp16_ = _tmp15_;
14558 bala_map_set (_tmp14_, _tmp16_, (gpointer) ((gintptr) (count + 1)));
14559 _tmp17_ = self->closure_struct;
14560 _tmp18_ = bala_variable_get_variable_type ((BalaVariable*) local);
14561 _tmp19_ = _tmp18_;
14562 _tmp20_ = bala_get_ccode_name ((BalaCodeNode*) _tmp19_);
14563 _tmp21_ = _tmp20_;
14564 _tmp22_ = bala_ccode_base_module_get_local_cname (self, local);
14565 _tmp23_ = _tmp22_;
14566 _tmp24_ = bala_variable_get_variable_type ((BalaVariable*) local);
14567 _tmp25_ = _tmp24_;
14568 _tmp26_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp25_);
14569 _tmp27_ = _tmp26_;
14570 bala_ccode_struct_add_field (_tmp17_, _tmp21_, _tmp23_, 0, _tmp27_);
14571 _bala_ccode_declarator_suffix_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_ccode_declarator_suffix_unref
(_tmp27_), ((void*)0))))
;
14572 _g_free0 (_tmp23_)(_tmp23_ = (g_free (_tmp23_), ((void*)0)));
14573 _g_free0 (_tmp21_)(_tmp21_ = (g_free (_tmp21_), ((void*)0)));
14574 } else {
14575 BalaCCodeVariableDeclarator* cvar = NULL((void*)0);
14576 gchar* _tmp28_;
14577 gchar* _tmp29_;
14578 BalaDataType* _tmp30_;
14579 BalaDataType* _tmp31_;
14580 BalaCCodeDeclaratorSuffix* _tmp32_;
14581 BalaCCodeDeclaratorSuffix* _tmp33_;
14582 BalaCCodeVariableDeclarator* _tmp34_;
14583 BalaCCodeVariableDeclarator* _tmp35_;
14584 BalaCCodeExpression* size = NULL((void*)0);
14585 BalaCCodeExpression* _tmp36_ = NULL((void*)0);
14586 gboolean _tmp37_;
14587 BalaCCodeFunction* _tmp66_;
14588 BalaCCodeFunction* _tmp67_;
14589 BalaDataType* _tmp68_;
14590 BalaDataType* _tmp69_;
14591 gchar* _tmp70_;
14592 gchar* _tmp71_;
14593 BalaCCodeVariableDeclarator* _tmp72_;
14594 _tmp28_ = bala_ccode_base_module_get_local_cname (self, local);
14595 _tmp29_ = _tmp28_;
14596 _tmp30_ = bala_variable_get_variable_type ((BalaVariable*) local);
14597 _tmp31_ = _tmp30_;
14598 _tmp32_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp31_);
14599 _tmp33_ = _tmp32_;
14600 _tmp34_ = bala_ccode_variable_declarator_new (_tmp29_, NULL((void*)0), _tmp33_);
14601 _tmp35_ = _tmp34_;
14602 _bala_ccode_declarator_suffix_unref0 (_tmp33_)((_tmp33_ == ((void*)0)) ? ((void*)0) : (_tmp33_ = (bala_ccode_declarator_suffix_unref
(_tmp33_), ((void*)0))))
;
14603 _g_free0 (_tmp29_)(_tmp29_ = (g_free (_tmp29_), ((void*)0)));
14604 cvar = _tmp35_;
14605 size = NULL((void*)0);
14606 _tmp37_ = bala_ccode_base_module_requires_memset_init (self, (BalaVariable*) local, &_tmp36_);
14607 _bala_ccode_node_unref0 (size)((size == ((void*)0)) ? ((void*)0) : (size = (bala_ccode_node_unref
(size), ((void*)0))))
;
14608 size = _tmp36_;
14609 if (!_tmp37_) {
14610 BalaCCodeVariableDeclarator* _tmp38_;
14611 BalaDataType* _tmp39_;
14612 BalaDataType* _tmp40_;
14613 BalaCCodeExpression* _tmp41_;
14614 BalaCCodeExpression* _tmp42_;
14615 BalaCCodeVariableDeclarator* _tmp43_;
14616 _tmp38_ = cvar;
14617 _tmp39_ = bala_variable_get_variable_type ((BalaVariable*) local);
14618 _tmp40_ = _tmp39_;
14619 _tmp41_ = bala_ccode_base_module_default_value_for_type (self, _tmp40_, TRUE(!(0)), FALSE(0));
14620 _tmp42_ = _tmp41_;
14621 bala_ccode_variable_declarator_set_initializer (_tmp38_, _tmp42_);
14622 _bala_ccode_node_unref0 (_tmp42_)((_tmp42_ == ((void*)0)) ? ((void*)0) : (_tmp42_ = (bala_ccode_node_unref
(_tmp42_), ((void*)0))))
;
14623 _tmp43_ = cvar;
14624 bala_ccode_variable_declarator_set_init0 (_tmp43_, TRUE(!(0)));
14625 } else {
14626 gboolean _tmp44_ = FALSE(0);
14627 BalaCCodeExpression* _tmp45_;
14628 _tmp45_ = size;
14629 if (_tmp45_ != NULL((void*)0)) {
14630 BalaExpression* _tmp46_;
14631 BalaExpression* _tmp47_;
14632 _tmp46_ = bala_variable_get_initializer ((BalaVariable*) local);
14633 _tmp47_ = _tmp46_;
14634 _tmp44_ = _tmp47_ == NULL((void*)0);
14635 } else {
14636 _tmp44_ = FALSE(0);
14637 }
14638 if (_tmp44_) {
14639 BalaCCodeFile* _tmp48_;
14640 BalaCCodeFunctionCall* memset_call = NULL((void*)0);
14641 BalaCCodeIdentifier* _tmp49_;
14642 BalaCCodeIdentifier* _tmp50_;
14643 BalaCCodeFunctionCall* _tmp51_;
14644 BalaCCodeFunctionCall* _tmp52_;
14645 BalaCCodeFunctionCall* _tmp53_;
14646 const gchar* _tmp54_;
14647 const gchar* _tmp55_;
14648 BalaCCodeExpression* _tmp56_;
14649 BalaCCodeExpression* _tmp57_;
14650 BalaCCodeFunctionCall* _tmp58_;
14651 BalaCCodeConstant* _tmp59_;
14652 BalaCCodeConstant* _tmp60_;
14653 BalaCCodeFunctionCall* _tmp61_;
14654 BalaCCodeExpression* _tmp62_;
14655 BalaCCodeFunction* _tmp63_;
14656 BalaCCodeFunction* _tmp64_;
14657 BalaCCodeFunctionCall* _tmp65_;
14658 _tmp48_ = self->cfile;
14659 bala_ccode_file_add_include (_tmp48_, "string.h", FALSE(0));
14660 _tmp49_ = bala_ccode_identifier_new ("memset");
14661 _tmp50_ = _tmp49_;
14662 _tmp51_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp50_);
14663 _tmp52_ = _tmp51_;
14664 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
14665 memset_call = _tmp52_;
14666 _tmp53_ = memset_call;
14667 _tmp54_ = bala_symbol_get_name ((BalaSymbol*) local);
14668 _tmp55_ = _tmp54_;
14669 _tmp56_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp55_);
14670 _tmp57_ = _tmp56_;
14671 bala_ccode_function_call_add_argument (_tmp53_, _tmp57_);
14672 _bala_ccode_node_unref0 (_tmp57_)((_tmp57_ == ((void*)0)) ? ((void*)0) : (_tmp57_ = (bala_ccode_node_unref
(_tmp57_), ((void*)0))))
;
14673 _tmp58_ = memset_call;
14674 _tmp59_ = bala_ccode_constant_new ("0");
14675 _tmp60_ = _tmp59_;
14676 bala_ccode_function_call_add_argument (_tmp58_, (BalaCCodeExpression*) _tmp60_);
14677 _bala_ccode_node_unref0 (_tmp60_)((_tmp60_ == ((void*)0)) ? ((void*)0) : (_tmp60_ = (bala_ccode_node_unref
(_tmp60_), ((void*)0))))
;
14678 _tmp61_ = memset_call;
14679 _tmp62_ = size;
14680 bala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
14681 _tmp63_ = bala_ccode_base_module_get_ccode (self);
14682 _tmp64_ = _tmp63_;
14683 _tmp65_ = memset_call;
14684 bala_ccode_function_add_expression (_tmp64_, (BalaCCodeExpression*) _tmp65_);
14685 _bala_ccode_node_unref0 (memset_call)((memset_call == ((void*)0)) ? ((void*)0) : (memset_call = (bala_ccode_node_unref
(memset_call), ((void*)0))))
;
14686 }
14687 }
14688 _tmp66_ = bala_ccode_base_module_get_ccode (self);
14689 _tmp67_ = _tmp66_;
14690 _tmp68_ = bala_variable_get_variable_type ((BalaVariable*) local);
14691 _tmp69_ = _tmp68_;
14692 _tmp70_ = bala_get_ccode_name ((BalaCodeNode*) _tmp69_);
14693 _tmp71_ = _tmp70_;
14694 _tmp72_ = cvar;
14695 bala_ccode_function_add_declaration (_tmp67_, _tmp71_, (BalaCCodeDeclarator*) _tmp72_, 0);
14696 _g_free0 (_tmp71_)(_tmp71_ = (g_free (_tmp71_), ((void*)0)));
14697 _bala_ccode_node_unref0 (size)((size == ((void*)0)) ? ((void*)0) : (size = (bala_ccode_node_unref
(size), ((void*)0))))
;
14698 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
14699 }
14700 }
14701 _tmp73_ = bala_variable_get_initializer ((BalaVariable*) local);
14702 _tmp74_ = _tmp73_;
14703 if (_tmp74_ != NULL((void*)0)) {
14704 BalaExpression* _tmp75_;
14705 BalaExpression* _tmp76_;
14706 BalaExpression* _tmp77_;
14707 BalaExpression* _tmp78_;
14708 _tmp75_ = bala_variable_get_initializer ((BalaVariable*) local);
14709 _tmp76_ = _tmp75_;
14710 bala_code_node_emit ((BalaCodeNode*) _tmp76_, (BalaCodeGenerator*) self);
14711 _tmp77_ = bala_variable_get_initializer ((BalaVariable*) local);
14712 _tmp78_ = _tmp77_;
14713 bala_code_visitor_visit_end_full_expression ((BalaCodeVisitor*) self, _tmp78_);
14714 }
14715 rhs = NULL((void*)0);
14716 _tmp80_ = bala_variable_get_initializer ((BalaVariable*) local);
14717 _tmp81_ = _tmp80_;
14718 if (_tmp81_ != NULL((void*)0)) {
14719 BalaExpression* _tmp82_;
14720 BalaExpression* _tmp83_;
14721 BalaCCodeExpression* _tmp84_;
14722 _tmp82_ = bala_variable_get_initializer ((BalaVariable*) local);
14723 _tmp83_ = _tmp82_;
14724 _tmp84_ = bala_get_cvalue (_tmp83_);
14725 _tmp79_ = _tmp84_ != NULL((void*)0);
14726 } else {
14727 _tmp79_ = FALSE(0);
14728 }
14729 if (_tmp79_) {
14730 BalaExpression* _tmp85_;
14731 BalaExpression* _tmp86_;
14732 BalaCCodeExpression* _tmp87_;
14733 BalaCCodeExpression* _tmp88_;
14734 _tmp85_ = bala_variable_get_initializer ((BalaVariable*) local);
14735 _tmp86_ = _tmp85_;
14736 _tmp87_ = bala_get_cvalue (_tmp86_);
14737 _tmp88_ = _bala_ccode_node_ref0 (_tmp87_);
14738 _bala_ccode_node_unref0 (rhs)((rhs == ((void*)0)) ? ((void*)0) : (rhs = (bala_ccode_node_unref
(rhs), ((void*)0))))
;
14739 rhs = _tmp88_;
14740 }
14741 if (declared) {
14742 BalaDataType* _tmp89_;
14743 BalaDataType* _tmp90_;
14744 _tmp89_ = bala_variable_get_variable_type ((BalaVariable*) local);
14745 _tmp90_ = _tmp89_;
14746 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp90_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp90_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
14747 BalaArrayType* array_type = NULL((void*)0);
14748 BalaDataType* _tmp91_;
14749 BalaDataType* _tmp92_;
14750 BalaArrayType* _tmp93_;
14751 BalaArrayType* _tmp94_;
14752 gboolean _tmp95_;
14753 gboolean _tmp96_;
14754 _tmp91_ = bala_variable_get_variable_type ((BalaVariable*) local);
14755 _tmp92_ = _tmp91_;
14756 _tmp93_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp92_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp92_), ((bala_array_type_get_type ())))))
);
14757 array_type = _tmp93_;
14758 _tmp94_ = array_type;
14759 _tmp95_ = bala_array_type_get_fixed_length (_tmp94_);
14760 _tmp96_ = _tmp95_;
14761 if (!_tmp96_) {
14762 BalaArrayType* _tmp117_;
14763 gint _tmp118_;
14764 gint _tmp119_;
14765 {
14766 gint dim = 0;
14767 dim = 1;
14768 {
14769 gboolean _tmp97_ = FALSE(0);
14770 _tmp97_ = TRUE(!(0));
14771 while (TRUE(!(0))) {
14772 BalaArrayType* _tmp99_;
14773 gint _tmp100_;
14774 gint _tmp101_;
14775 BalaLocalVariable* len_var = NULL((void*)0);
14776 BalaArrayType* _tmp102_;
14777 BalaDataType* _tmp103_;
14778 BalaDataType* _tmp104_;
14779 BalaDataType* _tmp105_;
14780 BalaDataType* _tmp106_;
14781 gchar* _tmp107_;
14782 gchar* _tmp108_;
14783 gchar* _tmp109_;
14784 gchar* _tmp110_;
14785 BalaLocalVariable* _tmp111_;
14786 BalaLocalVariable* _tmp112_;
14787 BalaLocalVariable* _tmp113_;
14788 BalaExpression* _tmp114_;
14789 BalaExpression* _tmp115_;
14790 BalaLocalVariable* _tmp116_;
14791 if (!_tmp97_) {
14792 gint _tmp98_;
14793 _tmp98_ = dim;
14794 dim = _tmp98_ + 1;
14795 }
14796 _tmp97_ = FALSE(0);
14797 _tmp99_ = array_type;
14798 _tmp100_ = bala_array_type_get_rank (_tmp99_);
14799 _tmp101_ = _tmp100_;
14800 if (!(dim <= _tmp101_)) {
14801 break;
14802 }
14803 _tmp102_ = array_type;
14804 _tmp103_ = bala_array_type_get_length_type (_tmp102_);
14805 _tmp104_ = _tmp103_;
14806 _tmp105_ = bala_data_type_copy (_tmp104_);
14807 _tmp106_ = _tmp105_;
14808 _tmp107_ = bala_ccode_base_module_get_local_cname (self, local);
14809 _tmp108_ = _tmp107_;
14810 _tmp109_ = bala_ccode_base_module_get_array_length_cname (self, _tmp108_, dim);
14811 _tmp110_ = _tmp109_;
14812 _tmp111_ = bala_local_variable_new (_tmp106_, _tmp110_, NULL((void*)0), NULL((void*)0));
14813 _tmp112_ = _tmp111_;
14814 _g_free0 (_tmp110_)(_tmp110_ = (g_free (_tmp110_), ((void*)0)));
14815 _g_free0 (_tmp108_)(_tmp108_ = (g_free (_tmp108_), ((void*)0)));
14816 _bala_code_node_unref0 (_tmp106_)((_tmp106_ == ((void*)0)) ? ((void*)0) : (_tmp106_ = (bala_code_node_unref
(_tmp106_), ((void*)0))))
;
14817 len_var = _tmp112_;
14818 _tmp113_ = len_var;
14819 _tmp114_ = bala_variable_get_initializer ((BalaVariable*) local);
14820 _tmp115_ = _tmp114_;
14821 bala_local_variable_set_init (_tmp113_, _tmp115_ == NULL((void*)0));
14822 _tmp116_ = len_var;
14823 bala_ccode_base_module_emit_temp_var (self, _tmp116_, FALSE(0));
14824 _bala_code_node_unref0 (len_var)((len_var == ((void*)0)) ? ((void*)0) : (len_var = (bala_code_node_unref
(len_var), ((void*)0))))
;
14825 }
14826 }
14827 }
14828 _tmp117_ = array_type;
14829 _tmp118_ = bala_array_type_get_rank (_tmp117_);
14830 _tmp119_ = _tmp118_;
14831 if (_tmp119_ == 1) {
14832 BalaLocalVariable* size_var = NULL((void*)0);
14833 BalaArrayType* _tmp120_;
14834 BalaDataType* _tmp121_;
14835 BalaDataType* _tmp122_;
14836 BalaDataType* _tmp123_;
14837 BalaDataType* _tmp124_;
14838 gchar* _tmp125_;
14839 gchar* _tmp126_;
14840 gchar* _tmp127_;
14841 gchar* _tmp128_;
14842 BalaLocalVariable* _tmp129_;
14843 BalaLocalVariable* _tmp130_;
14844 BalaLocalVariable* _tmp131_;
14845 BalaExpression* _tmp132_;
14846 BalaExpression* _tmp133_;
14847 BalaLocalVariable* _tmp134_;
14848 _tmp120_ = array_type;
14849 _tmp121_ = bala_array_type_get_length_type (_tmp120_);
14850 _tmp122_ = _tmp121_;
14851 _tmp123_ = bala_data_type_copy (_tmp122_);
14852 _tmp124_ = _tmp123_;
14853 _tmp125_ = bala_ccode_base_module_get_local_cname (self, local);
14854 _tmp126_ = _tmp125_;
14855 _tmp127_ = bala_ccode_base_module_get_array_size_cname (self, _tmp126_);
14856 _tmp128_ = _tmp127_;
14857 _tmp129_ = bala_local_variable_new (_tmp124_, _tmp128_, NULL((void*)0), NULL((void*)0));
14858 _tmp130_ = _tmp129_;
14859 _g_free0 (_tmp128_)(_tmp128_ = (g_free (_tmp128_), ((void*)0)));
14860 _g_free0 (_tmp126_)(_tmp126_ = (g_free (_tmp126_), ((void*)0)));
14861 _bala_code_node_unref0 (_tmp124_)((_tmp124_ == ((void*)0)) ? ((void*)0) : (_tmp124_ = (bala_code_node_unref
(_tmp124_), ((void*)0))))
;
14862 size_var = _tmp130_;
14863 _tmp131_ = size_var;
14864 _tmp132_ = bala_variable_get_initializer ((BalaVariable*) local);
14865 _tmp133_ = _tmp132_;
14866 bala_local_variable_set_init (_tmp131_, _tmp133_ == NULL((void*)0));
14867 _tmp134_ = size_var;
14868 bala_ccode_base_module_emit_temp_var (self, _tmp134_, FALSE(0));
14869 _bala_code_node_unref0 (size_var)((size_var == ((void*)0)) ? ((void*)0) : (size_var = (bala_code_node_unref
(size_var), ((void*)0))))
;
14870 }
14871 }
14872 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
14873 } else {
14874 BalaDataType* _tmp135_;
14875 BalaDataType* _tmp136_;
14876 _tmp135_ = bala_variable_get_variable_type ((BalaVariable*) local);
14877 _tmp136_ = _tmp135_;
14878 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp136_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp136_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
14879 BalaDelegateType* deleg_type = NULL((void*)0);
14880 BalaDataType* _tmp137_;
14881 BalaDataType* _tmp138_;
14882 BalaDelegateType* _tmp139_;
14883 BalaDelegateType* _tmp140_;
14884 BalaDelegate* _tmp141_;
14885 BalaDelegate* _tmp142_;
14886 gboolean _tmp143_;
14887 gboolean _tmp144_;
14888 _tmp137_ = bala_variable_get_variable_type ((BalaVariable*) local);
14889 _tmp138_ = _tmp137_;
14890 _tmp139_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp138_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp138_), ((bala_delegate_type_get_type ())))))
);
14891 deleg_type = _tmp139_;
14892 _tmp140_ = deleg_type;
14893 _tmp141_ = bala_delegate_type_get_delegate_symbol (_tmp140_);
14894 _tmp142_ = _tmp141_;
14895 _tmp143_ = bala_delegate_get_has_target (_tmp142_);
14896 _tmp144_ = _tmp143_;
14897 if (_tmp144_) {
14898 BalaLocalVariable* target_var = NULL((void*)0);
14899 BalaDataType* _tmp145_;
14900 BalaDataType* _tmp146_;
14901 BalaDataType* _tmp147_;
14902 gchar* _tmp148_;
14903 gchar* _tmp149_;
14904 gchar* _tmp150_;
14905 gchar* _tmp151_;
14906 BalaLocalVariable* _tmp152_;
14907 BalaLocalVariable* _tmp153_;
14908 BalaLocalVariable* _tmp154_;
14909 BalaExpression* _tmp155_;
14910 BalaExpression* _tmp156_;
14911 BalaLocalVariable* _tmp157_;
14912 BalaDelegateType* _tmp158_;
14913 _tmp145_ = self->delegate_target_type;
14914 _tmp146_ = bala_data_type_copy (_tmp145_);
14915 _tmp147_ = _tmp146_;
14916 _tmp148_ = bala_ccode_base_module_get_local_cname (self, local);
14917 _tmp149_ = _tmp148_;
14918 _tmp150_ = bala_ccode_base_module_get_delegate_target_cname (self, _tmp149_);
14919 _tmp151_ = _tmp150_;
14920 _tmp152_ = bala_local_variable_new (_tmp147_, _tmp151_, NULL((void*)0), NULL((void*)0));
14921 _tmp153_ = _tmp152_;
14922 _g_free0 (_tmp151_)(_tmp151_ = (g_free (_tmp151_), ((void*)0)));
14923 _g_free0 (_tmp149_)(_tmp149_ = (g_free (_tmp149_), ((void*)0)));
14924 _bala_code_node_unref0 (_tmp147_)((_tmp147_ == ((void*)0)) ? ((void*)0) : (_tmp147_ = (bala_code_node_unref
(_tmp147_), ((void*)0))))
;
14925 target_var = _tmp153_;
14926 _tmp154_ = target_var;
14927 _tmp155_ = bala_variable_get_initializer ((BalaVariable*) local);
14928 _tmp156_ = _tmp155_;
14929 bala_local_variable_set_init (_tmp154_, _tmp156_ == NULL((void*)0));
14930 _tmp157_ = target_var;
14931 bala_ccode_base_module_emit_temp_var (self, _tmp157_, FALSE(0));
14932 _tmp158_ = deleg_type;
14933 if (bala_data_type_is_disposable ((BalaDataType*) _tmp158_)) {
14934 BalaLocalVariable* target_destroy_notify_var = NULL((void*)0);
14935 BalaDelegateType* _tmp159_;
14936 BalaDataType* _tmp160_;
14937 BalaDataType* _tmp161_;
14938 gchar* _tmp162_;
14939 gchar* _tmp163_;
14940 gchar* _tmp164_;
14941 gchar* _tmp165_;
14942 BalaLocalVariable* _tmp166_;
14943 BalaLocalVariable* _tmp167_;
14944 BalaLocalVariable* _tmp168_;
14945 BalaExpression* _tmp169_;
14946 BalaExpression* _tmp170_;
14947 BalaLocalVariable* _tmp171_;
14948 _tmp159_ = self->delegate_target_destroy_type;
14949 _tmp160_ = bala_data_type_copy ((BalaDataType*) _tmp159_);
14950 _tmp161_ = _tmp160_;
14951 _tmp162_ = bala_ccode_base_module_get_local_cname (self, local);
14952 _tmp163_ = _tmp162_;
14953 _tmp164_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp163_);
14954 _tmp165_ = _tmp164_;
14955 _tmp166_ = bala_local_variable_new (_tmp161_, _tmp165_, NULL((void*)0), NULL((void*)0));
14956 _tmp167_ = _tmp166_;
14957 _g_free0 (_tmp165_)(_tmp165_ = (g_free (_tmp165_), ((void*)0)));
14958 _g_free0 (_tmp163_)(_tmp163_ = (g_free (_tmp163_), ((void*)0)));
14959 _bala_code_node_unref0 (_tmp161_)((_tmp161_ == ((void*)0)) ? ((void*)0) : (_tmp161_ = (bala_code_node_unref
(_tmp161_), ((void*)0))))
;
14960 target_destroy_notify_var = _tmp167_;
14961 _tmp168_ = target_destroy_notify_var;
14962 _tmp169_ = bala_variable_get_initializer ((BalaVariable*) local);
14963 _tmp170_ = _tmp169_;
14964 bala_local_variable_set_init (_tmp168_, _tmp170_ == NULL((void*)0));
14965 _tmp171_ = target_destroy_notify_var;
14966 bala_ccode_base_module_emit_temp_var (self, _tmp171_, FALSE(0));
14967 _bala_code_node_unref0 (target_destroy_notify_var)((target_destroy_notify_var == ((void*)0)) ? ((void*)0) : (target_destroy_notify_var
= (bala_code_node_unref (target_destroy_notify_var), ((void*
)0))))
;
14968 }
14969 _bala_code_node_unref0 (target_var)((target_var == ((void*)0)) ? ((void*)0) : (target_var = (bala_code_node_unref
(target_var), ((void*)0))))
;
14970 }
14971 _bala_code_node_unref0 (deleg_type)((deleg_type == ((void*)0)) ? ((void*)0) : (deleg_type = (bala_code_node_unref
(deleg_type), ((void*)0))))
;
14972 }
14973 }
14974 }
14975 _tmp172_ = rhs;
14976 if (_tmp172_ != NULL((void*)0)) {
14977 BalaExpression* _tmp173_;
14978 BalaExpression* _tmp174_;
14979 _tmp173_ = bala_variable_get_initializer ((BalaVariable*) local);
14980 _tmp174_ = _tmp173_;
14981 if (!bala_ccode_base_module_is_simple_struct_creation (self, (BalaVariable*) local, _tmp174_)) {
14982 BalaExpression* _tmp175_;
14983 BalaExpression* _tmp176_;
14984 BalaTargetValue* _tmp177_;
14985 BalaTargetValue* _tmp178_;
14986 BalaSourceReference* _tmp179_;
14987 BalaSourceReference* _tmp180_;
14988 _tmp175_ = bala_variable_get_initializer ((BalaVariable*) local);
14989 _tmp176_ = _tmp175_;
14990 _tmp177_ = bala_expression_get_target_value (_tmp176_);
14991 _tmp178_ = _tmp177_;
14992 _tmp179_ = bala_code_node_get_source_reference ((BalaCodeNode*) local);
14993 _tmp180_ = _tmp179_;
14994 bala_code_generator_store_local ((BalaCodeGenerator*) self, local, _tmp178_, TRUE(!(0)), _tmp180_);
14995 }
14996 }
14997 _tmp182_ = bala_variable_get_initializer ((BalaVariable*) local);
14998 _tmp183_ = _tmp182_;
14999 if (_tmp183_ != NULL((void*)0)) {
15000 BalaExpression* _tmp184_;
15001 BalaExpression* _tmp185_;
15002 gboolean _tmp186_;
15003 gboolean _tmp187_;
15004 _tmp184_ = bala_variable_get_initializer ((BalaVariable*) local);
15005 _tmp185_ = _tmp184_;
15006 _tmp186_ = bala_code_node_get_tree_can_fail ((BalaCodeNode*) _tmp185_);
15007 _tmp187_ = _tmp186_;
15008 _tmp181_ = _tmp187_;
15009 } else {
15010 _tmp181_ = FALSE(0);
15011 }
15012 if (_tmp181_) {
15013 BalaExpression* _tmp188_;
15014 BalaExpression* _tmp189_;
15015 _tmp188_ = bala_variable_get_initializer ((BalaVariable*) local);
15016 _tmp189_ = _tmp188_;
15017 bala_ccode_base_module_add_simple_check (self, (BalaCodeNode*) _tmp189_, FALSE(0));
15018 }
15019 bala_symbol_set_active ((BalaSymbol*) local, TRUE(!(0)));
15020 _bala_ccode_node_unref0 (rhs)((rhs == ((void*)0)) ? ((void*)0) : (rhs = (bala_ccode_node_unref
(rhs), ((void*)0))))
;
15021}
15022
15023/**
15024 * Create a temporary variable and return lvalue access to it
15025 */
15026BalaTargetValue*
15027bala_ccode_base_module_create_temp_value (BalaCCodeBaseModule* self,
15028 BalaDataType* type,
15029 gboolean init,
15030 BalaCodeNode* node_reference,
15031 gboolean* value_owned)
15032{
15033 BalaLocalVariable* local = NULL((void*)0);
15034 BalaDataType* _tmp2_;
15035 BalaDataType* _tmp3_;
15036 gint _tmp4_;
15037 gint _tmp5_;
15038 gchar* _tmp6_;
15039 gchar* _tmp7_;
15040 BalaSourceReference* _tmp8_;
15041 BalaSourceReference* _tmp9_;
15042 BalaLocalVariable* _tmp10_;
15043 BalaLocalVariable* _tmp11_;
15044 BalaLocalVariable* _tmp12_;
15045 BalaArrayType* array_type = NULL((void*)0);
15046 BalaLocalVariable* _tmp16_;
15047 BalaDataType* _tmp17_;
15048 BalaDataType* _tmp18_;
15049 BalaArrayType* _tmp19_;
15050 BalaDelegateType* deleg_type = NULL((void*)0);
15051 BalaLocalVariable* _tmp20_;
15052 BalaDataType* _tmp21_;
15053 BalaDataType* _tmp22_;
15054 BalaDelegateType* _tmp23_;
15055 BalaLocalVariable* _tmp24_;
15056 BalaArrayType* _tmp25_;
15057 BalaTargetValue* value = NULL((void*)0);
15058 BalaLocalVariable* _tmp83_;
15059 BalaTargetValue* _tmp84_;
15060 BalaTargetValue* result = NULL((void*)0);
15061 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
15062 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
15063 g_return_val_if_fail (node_reference != NULL, NULL)do { if ((node_reference != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node_reference != NULL"
); return (((void*)0)); } } while (0)
;
15064 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_VOID_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_void_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
15065 BalaSourceReference* _tmp0_;
15066 BalaSourceReference* _tmp1_;
15067 _tmp0_ = bala_code_node_get_source_reference (node_reference);
15068 _tmp1_ = _tmp0_;
15069 bala_report_error (_tmp1_, "internal: 'void' not supported as variable type");
15070 }
15071 _tmp2_ = bala_data_type_copy (type);
15072 _tmp3_ = _tmp2_;
15073 _tmp4_ = bala_ccode_base_module_get_next_temp_var_id (self);
15074 _tmp5_ = _tmp4_;
15075 bala_ccode_base_module_set_next_temp_var_id (self, _tmp5_ + 1);
15076 _tmp6_ = g_strdup_printf ("_tmp%d_", _tmp5_);
15077 _tmp7_ = _tmp6_;
15078 _tmp8_ = bala_code_node_get_source_reference (node_reference);
15079 _tmp9_ = _tmp8_;
15080 _tmp10_ = bala_local_variable_new (_tmp3_, _tmp7_, NULL((void*)0), _tmp9_);
15081 _tmp11_ = _tmp10_;
15082 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
15083 _bala_code_node_unref0 (_tmp3_)((_tmp3_ == ((void*)0)) ? ((void*)0) : (_tmp3_ = (bala_code_node_unref
(_tmp3_), ((void*)0))))
;
15084 local = _tmp11_;
15085 _tmp12_ = local;
15086 bala_local_variable_set_init (_tmp12_, init);
15087 if (value_owned != NULL((void*)0)) {
15088 BalaLocalVariable* _tmp13_;
15089 BalaDataType* _tmp14_;
15090 BalaDataType* _tmp15_;
15091 _tmp13_ = local;
15092 _tmp14_ = bala_variable_get_variable_type ((BalaVariable*) _tmp13_);
15093 _tmp15_ = _tmp14_;
15094 bala_data_type_set_value_owned (_tmp15_, *value_owned);
15095 }
15096 _tmp16_ = local;
15097 _tmp17_ = bala_variable_get_variable_type ((BalaVariable*) _tmp16_);
15098 _tmp18_ = _tmp17_;
15099 _tmp19_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp18_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp18_) : NULL((void*)0));
15100 array_type = _tmp19_;
15101 _tmp20_ = local;
15102 _tmp21_ = bala_variable_get_variable_type ((BalaVariable*) _tmp20_);
15103 _tmp22_ = _tmp21_;
15104 _tmp23_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp22_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaDelegateType*) _tmp22_) : NULL((void*)0));
15105 deleg_type = _tmp23_;
15106 _tmp24_ = local;
15107 bala_ccode_base_module_emit_temp_var (self, _tmp24_, FALSE(0));
15108 _tmp25_ = array_type;
15109 if (_tmp25_ != NULL((void*)0)) {
15110 {
15111 gint dim = 0;
15112 dim = 1;
15113 {
15114 gboolean _tmp26_ = FALSE(0);
15115 _tmp26_ = TRUE(!(0));
15116 while (TRUE(!(0))) {
15117 BalaArrayType* _tmp28_;
15118 gint _tmp29_;
15119 gint _tmp30_;
15120 BalaLocalVariable* len_var = NULL((void*)0);
15121 BalaArrayType* _tmp31_;
15122 BalaDataType* _tmp32_;
15123 BalaDataType* _tmp33_;
15124 BalaDataType* _tmp34_;
15125 BalaDataType* _tmp35_;
15126 BalaLocalVariable* _tmp36_;
15127 const gchar* _tmp37_;
15128 const gchar* _tmp38_;
15129 gchar* _tmp39_;
15130 gchar* _tmp40_;
15131 BalaSourceReference* _tmp41_;
15132 BalaSourceReference* _tmp42_;
15133 BalaLocalVariable* _tmp43_;
15134 BalaLocalVariable* _tmp44_;
15135 BalaLocalVariable* _tmp45_;
15136 BalaLocalVariable* _tmp46_;
15137 if (!_tmp26_) {
15138 gint _tmp27_;
15139 _tmp27_ = dim;
15140 dim = _tmp27_ + 1;
15141 }
15142 _tmp26_ = FALSE(0);
15143 _tmp28_ = array_type;
15144 _tmp29_ = bala_array_type_get_rank (_tmp28_);
15145 _tmp30_ = _tmp29_;
15146 if (!(dim <= _tmp30_)) {
15147 break;
15148 }
15149 _tmp31_ = array_type;
15150 _tmp32_ = bala_array_type_get_length_type (_tmp31_);
15151 _tmp33_ = _tmp32_;
15152 _tmp34_ = bala_data_type_copy (_tmp33_);
15153 _tmp35_ = _tmp34_;
15154 _tmp36_ = local;
15155 _tmp37_ = bala_symbol_get_name ((BalaSymbol*) _tmp36_);
15156 _tmp38_ = _tmp37_;
15157 _tmp39_ = bala_ccode_base_module_get_array_length_cname (self, _tmp38_, dim);
15158 _tmp40_ = _tmp39_;
15159 _tmp41_ = bala_code_node_get_source_reference (node_reference);
15160 _tmp42_ = _tmp41_;
15161 _tmp43_ = bala_local_variable_new (_tmp35_, _tmp40_, NULL((void*)0), _tmp42_);
15162 _tmp44_ = _tmp43_;
15163 _g_free0 (_tmp40_)(_tmp40_ = (g_free (_tmp40_), ((void*)0)));
15164 _bala_code_node_unref0 (_tmp35_)((_tmp35_ == ((void*)0)) ? ((void*)0) : (_tmp35_ = (bala_code_node_unref
(_tmp35_), ((void*)0))))
;
15165 len_var = _tmp44_;
15166 _tmp45_ = len_var;
15167 bala_local_variable_set_init (_tmp45_, init);
15168 _tmp46_ = len_var;
15169 bala_ccode_base_module_emit_temp_var (self, _tmp46_, FALSE(0));
15170 _bala_code_node_unref0 (len_var)((len_var == ((void*)0)) ? ((void*)0) : (len_var = (bala_code_node_unref
(len_var), ((void*)0))))
;
15171 }
15172 }
15173 }
15174 } else {
15175 gboolean _tmp47_ = FALSE(0);
15176 BalaDelegateType* _tmp48_;
15177 _tmp48_ = deleg_type;
15178 if (_tmp48_ != NULL((void*)0)) {
15179 BalaDelegateType* _tmp49_;
15180 BalaDelegate* _tmp50_;
15181 BalaDelegate* _tmp51_;
15182 gboolean _tmp52_;
15183 gboolean _tmp53_;
15184 _tmp49_ = deleg_type;
15185 _tmp50_ = bala_delegate_type_get_delegate_symbol (_tmp49_);
15186 _tmp51_ = _tmp50_;
15187 _tmp52_ = bala_delegate_get_has_target (_tmp51_);
15188 _tmp53_ = _tmp52_;
15189 _tmp47_ = _tmp53_;
15190 } else {
15191 _tmp47_ = FALSE(0);
15192 }
15193 if (_tmp47_) {
15194 BalaLocalVariable* target_var = NULL((void*)0);
15195 BalaDataType* _tmp54_;
15196 BalaDataType* _tmp55_;
15197 BalaDataType* _tmp56_;
15198 BalaLocalVariable* _tmp57_;
15199 const gchar* _tmp58_;
15200 const gchar* _tmp59_;
15201 gchar* _tmp60_;
15202 gchar* _tmp61_;
15203 BalaSourceReference* _tmp62_;
15204 BalaSourceReference* _tmp63_;
15205 BalaLocalVariable* _tmp64_;
15206 BalaLocalVariable* _tmp65_;
15207 BalaLocalVariable* _tmp66_;
15208 BalaLocalVariable* _tmp67_;
15209 BalaDelegateType* _tmp68_;
15210 _tmp54_ = self->delegate_target_type;
15211 _tmp55_ = bala_data_type_copy (_tmp54_);
15212 _tmp56_ = _tmp55_;
15213 _tmp57_ = local;
15214 _tmp58_ = bala_symbol_get_name ((BalaSymbol*) _tmp57_);
15215 _tmp59_ = _tmp58_;
15216 _tmp60_ = bala_ccode_base_module_get_delegate_target_cname (self, _tmp59_);
15217 _tmp61_ = _tmp60_;
15218 _tmp62_ = bala_code_node_get_source_reference (node_reference);
15219 _tmp63_ = _tmp62_;
15220 _tmp64_ = bala_local_variable_new (_tmp56_, _tmp61_, NULL((void*)0), _tmp63_);
15221 _tmp65_ = _tmp64_;
15222 _g_free0 (_tmp61_)(_tmp61_ = (g_free (_tmp61_), ((void*)0)));
15223 _bala_code_node_unref0 (_tmp56_)((_tmp56_ == ((void*)0)) ? ((void*)0) : (_tmp56_ = (bala_code_node_unref
(_tmp56_), ((void*)0))))
;
15224 target_var = _tmp65_;
15225 _tmp66_ = target_var;
15226 bala_local_variable_set_init (_tmp66_, init);
15227 _tmp67_ = target_var;
15228 bala_ccode_base_module_emit_temp_var (self, _tmp67_, FALSE(0));
15229 _tmp68_ = deleg_type;
15230 if (bala_data_type_is_disposable ((BalaDataType*) _tmp68_)) {
15231 BalaLocalVariable* target_destroy_notify_var = NULL((void*)0);
15232 BalaDelegateType* _tmp69_;
15233 BalaDataType* _tmp70_;
15234 BalaDataType* _tmp71_;
15235 BalaLocalVariable* _tmp72_;
15236 const gchar* _tmp73_;
15237 const gchar* _tmp74_;
15238 gchar* _tmp75_;
15239 gchar* _tmp76_;
15240 BalaSourceReference* _tmp77_;
15241 BalaSourceReference* _tmp78_;
15242 BalaLocalVariable* _tmp79_;
15243 BalaLocalVariable* _tmp80_;
15244 BalaLocalVariable* _tmp81_;
15245 BalaLocalVariable* _tmp82_;
15246 _tmp69_ = self->delegate_target_destroy_type;
15247 _tmp70_ = bala_data_type_copy ((BalaDataType*) _tmp69_);
15248 _tmp71_ = _tmp70_;
15249 _tmp72_ = local;
15250 _tmp73_ = bala_symbol_get_name ((BalaSymbol*) _tmp72_);
15251 _tmp74_ = _tmp73_;
15252 _tmp75_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, _tmp74_);
15253 _tmp76_ = _tmp75_;
15254 _tmp77_ = bala_code_node_get_source_reference (node_reference);
15255 _tmp78_ = _tmp77_;
15256 _tmp79_ = bala_local_variable_new (_tmp71_, _tmp76_, NULL((void*)0), _tmp78_);
15257 _tmp80_ = _tmp79_;
15258 _g_free0 (_tmp76_)(_tmp76_ = (g_free (_tmp76_), ((void*)0)));
15259 _bala_code_node_unref0 (_tmp71_)((_tmp71_ == ((void*)0)) ? ((void*)0) : (_tmp71_ = (bala_code_node_unref
(_tmp71_), ((void*)0))))
;
15260 target_destroy_notify_var = _tmp80_;
15261 _tmp81_ = target_destroy_notify_var;
15262 bala_local_variable_set_init (_tmp81_, init);
15263 _tmp82_ = target_destroy_notify_var;
15264 bala_ccode_base_module_emit_temp_var (self, _tmp82_, FALSE(0));
15265 _bala_code_node_unref0 (target_destroy_notify_var)((target_destroy_notify_var == ((void*)0)) ? ((void*)0) : (target_destroy_notify_var
= (bala_code_node_unref (target_destroy_notify_var), ((void*
)0))))
;
15266 }
15267 _bala_code_node_unref0 (target_var)((target_var == ((void*)0)) ? ((void*)0) : (target_var = (bala_code_node_unref
(target_var), ((void*)0))))
;
15268 }
15269 }
15270 _tmp83_ = local;
15271 _tmp84_ = bala_ccode_base_module_get_local_cvalue (self, _tmp83_);
15272 value = _tmp84_;
15273 bala_set_array_size_cvalue (value, NULL((void*)0));
15274 result = value;
15275 _bala_code_node_unref0 (deleg_type)((deleg_type == ((void*)0)) ? ((void*)0) : (deleg_type = (bala_code_node_unref
(deleg_type), ((void*)0))))
;
15276 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
15277 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
15278 return result;
15279}
15280
15281/**
15282 * Load a temporary variable returning unowned or owned rvalue access to it, depending on the ownership of the value type.
15283 */
15284BalaTargetValue*
15285bala_ccode_base_module_load_temp_value (BalaCCodeBaseModule* self,
15286 BalaTargetValue* lvalue)
15287{
15288 BalaGLibValue* value = NULL((void*)0);
15289 BalaGLibValue* _tmp0_;
15290 BalaDelegateType* deleg_type = NULL((void*)0);
15291 BalaGLibValue* _tmp1_;
15292 BalaDataType* _tmp2_;
15293 BalaDataType* _tmp3_;
15294 BalaDelegateType* _tmp4_;
15295 BalaDelegateType* _tmp5_;
15296 BalaTargetValue* result = NULL((void*)0);
15297 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
15298 g_return_val_if_fail (lvalue != NULL, NULL)do { if ((lvalue != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "lvalue != NULL"
); return (((void*)0)); } } while (0)
;
15299 _tmp0_ = bala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (lvalue, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (lvalue), ((bala_glib_value_get_type ())))))
);
15300 value = _tmp0_;
15301 _tmp1_ = value;
15302 _tmp2_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp1_);
15303 _tmp3_ = _tmp2_;
15304 _tmp4_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaDelegateType*) _tmp3_) : NULL((void*)0));
15305 deleg_type = _tmp4_;
15306 _tmp5_ = deleg_type;
15307 if (_tmp5_ != NULL((void*)0)) {
15308 BalaDelegateType* _tmp6_;
15309 BalaDelegate* _tmp7_;
15310 BalaDelegate* _tmp8_;
15311 gboolean _tmp9_;
15312 gboolean _tmp10_;
15313 _tmp6_ = deleg_type;
15314 _tmp7_ = bala_delegate_type_get_delegate_symbol (_tmp6_);
15315 _tmp8_ = _tmp7_;
15316 _tmp9_ = bala_delegate_get_has_target (_tmp8_);
15317 _tmp10_ = _tmp9_;
15318 if (!_tmp10_) {
15319 BalaGLibValue* _tmp11_;
15320 BalaCCodeConstant* _tmp12_;
15321 BalaGLibValue* _tmp13_;
15322 _tmp11_ = value;
15323 _tmp12_ = bala_ccode_constant_new ("NULL");
15324 _bala_ccode_node_unref0 (_tmp11_->delegate_target_cvalue)((_tmp11_->delegate_target_cvalue == ((void*)0)) ? ((void*
)0) : (_tmp11_->delegate_target_cvalue = (bala_ccode_node_unref
(_tmp11_->delegate_target_cvalue), ((void*)0))))
;
15325 _tmp11_->delegate_target_cvalue = (BalaCCodeExpression*) _tmp12_;
15326 _tmp13_ = value;
15327 G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp13_), ((bala_glib_value_get_type ())))))
->lvalue = FALSE(0);
15328 } else {
15329 BalaDelegateType* _tmp14_;
15330 _tmp14_ = deleg_type;
15331 if (!bala_data_type_is_disposable ((BalaDataType*) _tmp14_)) {
15332 BalaGLibValue* _tmp15_;
15333 BalaCCodeConstant* _tmp16_;
15334 BalaGLibValue* _tmp17_;
15335 _tmp15_ = value;
15336 _tmp16_ = bala_ccode_constant_new ("NULL");
15337 _bala_ccode_node_unref0 (_tmp15_->delegate_target_destroy_notify_cvalue)((_tmp15_->delegate_target_destroy_notify_cvalue == ((void
*)0)) ? ((void*)0) : (_tmp15_->delegate_target_destroy_notify_cvalue
= (bala_ccode_node_unref (_tmp15_->delegate_target_destroy_notify_cvalue
), ((void*)0))))
;
15338 _tmp15_->delegate_target_destroy_notify_cvalue = (BalaCCodeExpression*) _tmp16_;
15339 _tmp17_ = value;
15340 G_TYPE_CHECK_INSTANCE_CAST (_tmp17_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp17_), ((bala_glib_value_get_type ())))))
->lvalue = FALSE(0);
15341 }
15342 }
15343 }
15344 result = (BalaTargetValue*) value;
15345 _bala_code_node_unref0 (deleg_type)((deleg_type == ((void*)0)) ? ((void*)0) : (deleg_type = (bala_code_node_unref
(deleg_type), ((void*)0))))
;
15346 return result;
15347}
15348
15349/**
15350 * Store a value in a temporary variable and return unowned or owned rvalue access to it, depending on the ownership of the given type.
15351 */
15352BalaTargetValue*
15353bala_ccode_base_module_store_temp_value (BalaCCodeBaseModule* self,
15354 BalaTargetValue* initializer,
15355 BalaCodeNode* node_reference,
15356 gboolean* value_owned)
15357{
15358 BalaTargetValue* lvalue = NULL((void*)0);
15359 BalaDataType* _tmp0_;
15360 BalaDataType* _tmp1_;
15361 BalaTargetValue* _tmp2_;
15362 BalaSourceReference* _tmp3_;
15363 BalaSourceReference* _tmp4_;
15364 BalaTargetValue* _tmp5_;
15365 BalaTargetValue* result = NULL((void*)0);
15366 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
15367 g_return_val_if_fail (initializer != NULL, NULL)do { if ((initializer != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "initializer != NULL"
); return (((void*)0)); } } while (0)
;
15368 g_return_val_if_fail (node_reference != NULL, NULL)do { if ((node_reference != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node_reference != NULL"
); return (((void*)0)); } } while (0)
;
15369 _tmp0_ = bala_target_value_get_value_type (initializer);
15370 _tmp1_ = _tmp0_;
15371 _tmp2_ = bala_ccode_base_module_create_temp_value (self, _tmp1_, FALSE(0), node_reference, value_owned);
15372 lvalue = _tmp2_;
15373 _tmp3_ = bala_code_node_get_source_reference (node_reference);
15374 _tmp4_ = _tmp3_;
15375 bala_ccode_base_module_store_value (self, lvalue, initializer, _tmp4_);
15376 _tmp5_ = bala_ccode_base_module_load_temp_value (self, lvalue);
15377 result = _tmp5_;
15378 _bala_target_value_unref0 (lvalue)((lvalue == ((void*)0)) ? ((void*)0) : (lvalue = (bala_target_value_unref
(lvalue), ((void*)0))))
;
15379 return result;
15380}
15381
15382static void
15383bala_ccode_base_module_real_visit_initializer_list (BalaCodeVisitor* base,
15384 BalaInitializerList* list)
15385{
15386 BalaCCodeBaseModule * self;
15387 BalaDataType* _tmp0_;
15388 BalaDataType* _tmp1_;
15389 BalaTypeSymbol* _tmp2_;
15390 BalaTypeSymbol* _tmp3_;
15391 self = (BalaCCodeBaseModule*) base;
15392 g_return_if_fail (list != NULL)do { if ((list != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "list != NULL"
); return; } } while (0)
;
15393 _tmp0_ = bala_expression_get_target_type ((BalaExpression*) list);
15394 _tmp1_ = _tmp0_;
15395 _tmp2_ = bala_data_type_get_type_symbol (_tmp1_);
15396 _tmp3_ = _tmp2_;
15397 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
15398 BalaStruct* st = NULL((void*)0);
15399 BalaDataType* _tmp4_;
15400 BalaDataType* _tmp5_;
15401 BalaTypeSymbol* _tmp6_;
15402 BalaTypeSymbol* _tmp7_;
15403 gboolean _tmp14_ = FALSE(0);
15404 gboolean _tmp15_ = FALSE(0);
15405 BalaCodeNode* _tmp16_;
15406 BalaCodeNode* _tmp17_;
15407 _tmp4_ = bala_expression_get_target_type ((BalaExpression*) list);
15408 _tmp5_ = _tmp4_;
15409 _tmp6_ = bala_data_type_get_type_symbol (_tmp5_);
15410 _tmp7_ = _tmp6_;
15411 st = G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp7_), ((bala_struct_get_type ())))))
;
15412 while (TRUE(!(0))) {
15413 BalaStruct* _tmp8_;
15414 BalaStruct* _tmp9_;
15415 BalaStruct* _tmp10_;
15416 BalaStruct* _tmp11_;
15417 BalaStruct* _tmp12_;
15418 BalaStruct* _tmp13_;
15419 _tmp8_ = st;
15420 _tmp9_ = bala_struct_get_base_struct (_tmp8_);
15421 _tmp10_ = _tmp9_;
15422 if (!(_tmp10_ != NULL((void*)0))) {
15423 break;
15424 }
15425 _tmp11_ = st;
15426 _tmp12_ = bala_struct_get_base_struct (_tmp11_);
15427 _tmp13_ = _tmp12_;
15428 st = _tmp13_;
15429 }
15430 _tmp16_ = bala_code_node_get_parent_node ((BalaCodeNode*) list);
15431 _tmp17_ = _tmp16_;
15432 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, BALA_TYPE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp17_); GType __t = ((bala_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
15433 _tmp15_ = TRUE(!(0));
15434 } else {
15435 BalaCodeNode* _tmp18_;
15436 BalaCodeNode* _tmp19_;
15437 _tmp18_ = bala_code_node_get_parent_node ((BalaCodeNode*) list);
15438 _tmp19_ = _tmp18_;
15439 _tmp15_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, BALA_TYPE_FIELD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp19_); GType __t = ((bala_field_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
15440 }
15441 if (_tmp15_) {
15442 _tmp14_ = TRUE(!(0));
15443 } else {
15444 BalaCodeNode* _tmp20_;
15445 BalaCodeNode* _tmp21_;
15446 _tmp20_ = bala_code_node_get_parent_node ((BalaCodeNode*) list);
15447 _tmp21_ = _tmp20_;
15448 _tmp14_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, BALA_TYPE_INITIALIZER_LIST)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp21_); GType __t = ((bala_initializer_list_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
15449 }
15450 if (_tmp14_) {
15451 BalaCCodeInitializerList* clist = NULL((void*)0);
15452 BalaCCodeInitializerList* _tmp22_;
15453 BalaIterator* field_it = NULL((void*)0);
15454 BalaStruct* _tmp23_;
15455 BalaList* _tmp24_;
15456 BalaIterator* _tmp25_;
15457 gboolean _tmp88_ = FALSE(0);
15458 BalaCodeNode* _tmp89_;
15459 BalaCodeNode* _tmp90_;
15460 _tmp22_ = bala_ccode_initializer_list_new ();
15461 clist = _tmp22_;
15462 _tmp23_ = st;
15463 _tmp24_ = bala_struct_get_fields (_tmp23_);
15464 _tmp25_ = bala_iterable_iterator ((BalaIterable*) _tmp24_);
15465 field_it = _tmp25_;
15466 {
15467 BalaList* _expr_list = NULL((void*)0);
15468 BalaList* _tmp26_;
15469 BalaList* _tmp27_;
15470 gint _expr_size = 0;
15471 BalaList* _tmp28_;
15472 gint _tmp29_;
15473 gint _tmp30_;
15474 gint _expr_index = 0;
15475 _tmp26_ = bala_initializer_list_get_initializers (list);
15476 _tmp27_ = _bala_iterable_ref0 (_tmp26_);
15477 _expr_list = _tmp27_;
15478 _tmp28_ = _expr_list;
15479 _tmp29_ = bala_collection_get_size ((BalaCollection*) _tmp28_);
15480 _tmp30_ = _tmp29_;
15481 _expr_size = _tmp30_;
15482 _expr_index = -1;
15483 while (TRUE(!(0))) {
15484 gint _tmp31_;
15485 gint _tmp32_;
15486 BalaExpression* expr = NULL((void*)0);
15487 BalaList* _tmp33_;
15488 gpointer _tmp34_;
15489 BalaField* field = NULL((void*)0);
15490 BalaCCodeExpression* cexpr = NULL((void*)0);
15491 BalaExpression* _tmp42_;
15492 BalaCCodeExpression* _tmp43_;
15493 BalaCCodeExpression* _tmp44_;
15494 gchar* ctype = NULL((void*)0);
15495 BalaField* _tmp45_;
15496 gchar* _tmp46_;
15497 const gchar* _tmp47_;
15498 BalaCCodeInitializerList* _tmp51_;
15499 BalaCCodeExpression* _tmp52_;
15500 BalaArrayType* array_type = NULL((void*)0);
15501 BalaField* _tmp53_;
15502 BalaDataType* _tmp54_;
15503 BalaDataType* _tmp55_;
15504 BalaArrayType* _tmp56_;
15505 gboolean _tmp57_ = FALSE(0);
15506 gboolean _tmp58_ = FALSE(0);
15507 gboolean _tmp59_ = FALSE(0);
15508 BalaArrayType* _tmp60_;
15509 _expr_index = _expr_index + 1;
15510 _tmp31_ = _expr_index;
15511 _tmp32_ = _expr_size;
15512 if (!(_tmp31_ < _tmp32_)) {
15513 break;
15514 }
15515 _tmp33_ = _expr_list;
15516 _tmp34_ = bala_list_get (_tmp33_, _expr_index);
15517 expr = (BalaExpression*) _tmp34_;
15518 field = NULL((void*)0);
15519 while (TRUE(!(0))) {
15520 BalaField* _tmp35_;
15521 BalaIterator* _tmp36_;
15522 BalaIterator* _tmp37_;
15523 gpointer _tmp38_;
15524 BalaField* _tmp39_;
15525 BalaMemberBinding _tmp40_;
15526 BalaMemberBinding _tmp41_;
15527 _tmp35_ = field;
15528 if (!(_tmp35_ == NULL((void*)0))) {
15529 break;
15530 }
15531 _tmp36_ = field_it;
15532 bala_iterator_next (_tmp36_);
15533 _tmp37_ = field_it;
15534 _tmp38_ = bala_iterator_get (_tmp37_);
15535 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
15536 field = (BalaField*) _tmp38_;
15537 _tmp39_ = field;
15538 _tmp40_ = bala_field_get_binding (_tmp39_);
15539 _tmp41_ = _tmp40_;
15540 if (_tmp41_ != BALA_MEMBER_BINDING_INSTANCE) {
15541 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
15542 field = NULL((void*)0);
15543 }
15544 }
15545 _tmp42_ = expr;
15546 _tmp43_ = bala_get_cvalue (_tmp42_);
15547 _tmp44_ = _bala_ccode_node_ref0 (_tmp43_);
15548 cexpr = _tmp44_;
15549 _tmp45_ = field;
15550 _tmp46_ = bala_get_ccode_type ((BalaCodeNode*) _tmp45_);
15551 ctype = _tmp46_;
15552 _tmp47_ = ctype;
15553 if (_tmp47_ != NULL((void*)0)) {
15554 BalaCCodeExpression* _tmp48_;
15555 const gchar* _tmp49_;
15556 BalaCCodeCastExpression* _tmp50_;
15557 _tmp48_ = cexpr;
15558 _tmp49_ = ctype;
15559 _tmp50_ = bala_ccode_cast_expression_new (_tmp48_, _tmp49_);
15560 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
15561 cexpr = (BalaCCodeExpression*) _tmp50_;
15562 }
15563 _tmp51_ = clist;
15564 _tmp52_ = cexpr;
15565 bala_ccode_initializer_list_append (_tmp51_, _tmp52_);
15566 _tmp53_ = field;
15567 _tmp54_ = bala_variable_get_variable_type ((BalaVariable*) _tmp53_);
15568 _tmp55_ = _tmp54_;
15569 _tmp56_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp55_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp55_) : NULL((void*)0));
15570 array_type = _tmp56_;
15571 _tmp60_ = array_type;
15572 if (_tmp60_ != NULL((void*)0)) {
15573 BalaArrayType* _tmp61_;
15574 gboolean _tmp62_;
15575 gboolean _tmp63_;
15576 _tmp61_ = array_type;
15577 _tmp62_ = bala_array_type_get_fixed_length (_tmp61_);
15578 _tmp63_ = _tmp62_;
15579 _tmp59_ = !_tmp63_;
15580 } else {
15581 _tmp59_ = FALSE(0);
15582 }
15583 if (_tmp59_) {
15584 BalaField* _tmp64_;
15585 _tmp64_ = field;
15586 _tmp58_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp64_);
15587 } else {
15588 _tmp58_ = FALSE(0);
15589 }
15590 if (_tmp58_) {
15591 BalaField* _tmp65_;
15592 _tmp65_ = field;
15593 _tmp57_ = !bala_get_ccode_array_null_terminated ((BalaCodeNode*) _tmp65_);
15594 } else {
15595 _tmp57_ = FALSE(0);
15596 }
15597 if (_tmp57_) {
15598 gboolean _tmp77_ = FALSE(0);
15599 BalaArrayType* _tmp78_;
15600 gint _tmp79_;
15601 gint _tmp80_;
15602 {
15603 gint dim = 0;
15604 dim = 1;
15605 {
15606 gboolean _tmp66_ = FALSE(0);
15607 _tmp66_ = TRUE(!(0));
15608 while (TRUE(!(0))) {
15609 BalaArrayType* _tmp68_;
15610 gint _tmp69_;
15611 gint _tmp70_;
15612 BalaCCodeInitializerList* _tmp71_;
15613 BalaExpression* _tmp72_;
15614 BalaTargetValue* _tmp73_;
15615 BalaTargetValue* _tmp74_;
15616 BalaCCodeExpression* _tmp75_;
15617 BalaCCodeExpression* _tmp76_;
15618 if (!_tmp66_) {
15619 gint _tmp67_;
15620 _tmp67_ = dim;
15621 dim = _tmp67_ + 1;
15622 }
15623 _tmp66_ = FALSE(0);
15624 _tmp68_ = array_type;
15625 _tmp69_ = bala_array_type_get_rank (_tmp68_);
15626 _tmp70_ = _tmp69_;
15627 if (!(dim <= _tmp70_)) {
15628 break;
15629 }
15630 _tmp71_ = clist;
15631 _tmp72_ = expr;
15632 _tmp73_ = bala_expression_get_target_value (_tmp72_);
15633 _tmp74_ = _tmp73_;
15634 _tmp75_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp74_, dim);
15635 _tmp76_ = _tmp75_;
15636 bala_ccode_initializer_list_append (_tmp71_, _tmp76_);
15637 _bala_ccode_node_unref0 (_tmp76_)((_tmp76_ == ((void*)0)) ? ((void*)0) : (_tmp76_ = (bala_ccode_node_unref
(_tmp76_), ((void*)0))))
;
15638 }
15639 }
15640 }
15641 _tmp78_ = array_type;
15642 _tmp79_ = bala_array_type_get_rank (_tmp78_);
15643 _tmp80_ = _tmp79_;
15644 if (_tmp80_ == 1) {
15645 BalaField* _tmp81_;
15646 _tmp81_ = field;
15647 _tmp77_ = bala_symbol_is_internal_symbol ((BalaSymbol*) _tmp81_);
15648 } else {
15649 _tmp77_ = FALSE(0);
15650 }
15651 if (_tmp77_) {
15652 BalaCCodeInitializerList* _tmp82_;
15653 BalaExpression* _tmp83_;
15654 BalaTargetValue* _tmp84_;
15655 BalaTargetValue* _tmp85_;
15656 BalaCCodeExpression* _tmp86_;
15657 BalaCCodeExpression* _tmp87_;
15658 _tmp82_ = clist;
15659 _tmp83_ = expr;
15660 _tmp84_ = bala_expression_get_target_value (_tmp83_);
15661 _tmp85_ = _tmp84_;
15662 _tmp86_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp85_, 1);
15663 _tmp87_ = _tmp86_;
15664 bala_ccode_initializer_list_append (_tmp82_, _tmp87_);
15665 _bala_ccode_node_unref0 (_tmp87_)((_tmp87_ == ((void*)0)) ? ((void*)0) : (_tmp87_ = (bala_ccode_node_unref
(_tmp87_), ((void*)0))))
;
15666 }
15667 }
15668 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
15669 _g_free0 (ctype)(ctype = (g_free (ctype), ((void*)0)));
15670 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
15671 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
15672 _bala_code_node_unref0 (expr)((expr == ((void*)0)) ? ((void*)0) : (expr = (bala_code_node_unref
(expr), ((void*)0))))
;
15673 }
15674 _bala_iterable_unref0 (_expr_list)((_expr_list == ((void*)0)) ? ((void*)0) : (_expr_list = (bala_iterable_unref
(_expr_list), ((void*)0))))
;
15675 }
15676 _tmp89_ = bala_code_node_get_parent_node ((BalaCodeNode*) list);
15677 _tmp90_ = _tmp89_;
15678 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp90_, BALA_TYPE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp90_); GType __t = ((bala_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
15679 _tmp88_ = TRUE(!(0));
15680 } else {
15681 gboolean _tmp91_ = FALSE(0);
15682 BalaCodeNode* _tmp92_;
15683 BalaCodeNode* _tmp93_;
15684 _tmp92_ = bala_code_node_get_parent_node ((BalaCodeNode*) list);
15685 _tmp93_ = _tmp92_;
15686 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp93_, BALA_TYPE_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp93_); GType __t = ((bala_expression_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
15687 BalaCodeNode* _tmp94_;
15688 BalaCodeNode* _tmp95_;
15689 BalaDataType* _tmp96_;
15690 BalaDataType* _tmp97_;
15691 _tmp94_ = bala_code_node_get_parent_node ((BalaCodeNode*) list);
15692 _tmp95_ = _tmp94_;
15693 _tmp96_ = bala_expression_get_value_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp95_, BALA_TYPE_EXPRESSION, BalaExpression)(((BalaExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp95_), ((bala_expression_get_type ())))))
);
15694 _tmp97_ = _tmp96_;
15695 _tmp91_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp97_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp97_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
15696 } else {
15697 _tmp91_ = FALSE(0);
15698 }
15699 _tmp88_ = _tmp91_;
15700 }
15701 if (_tmp88_) {
15702 BalaCCodeInitializerList* _tmp98_;
15703 _tmp98_ = clist;
15704 bala_set_cvalue ((BalaExpression*) list, (BalaCCodeExpression*) _tmp98_);
15705 } else {
15706 BalaCCodeInitializerList* _tmp99_;
15707 BalaDataType* _tmp100_;
15708 BalaDataType* _tmp101_;
15709 BalaTypeSymbol* _tmp102_;
15710 BalaTypeSymbol* _tmp103_;
15711 gchar* _tmp104_;
15712 gchar* _tmp105_;
15713 BalaCCodeCastExpression* _tmp106_;
15714 BalaCCodeCastExpression* _tmp107_;
15715 _tmp99_ = clist;
15716 _tmp100_ = bala_expression_get_target_type ((BalaExpression*) list);
15717 _tmp101_ = _tmp100_;
15718 _tmp102_ = bala_data_type_get_type_symbol (_tmp101_);
15719 _tmp103_ = _tmp102_;
15720 _tmp104_ = bala_get_ccode_name ((BalaCodeNode*) _tmp103_);
15721 _tmp105_ = _tmp104_;
15722 _tmp106_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp99_, _tmp105_);
15723 _tmp107_ = _tmp106_;
15724 bala_set_cvalue ((BalaExpression*) list, (BalaCCodeExpression*) _tmp107_);
15725 _bala_ccode_node_unref0 (_tmp107_)((_tmp107_ == ((void*)0)) ? ((void*)0) : (_tmp107_ = (bala_ccode_node_unref
(_tmp107_), ((void*)0))))
;
15726 _g_free0 (_tmp105_)(_tmp105_ = (g_free (_tmp105_), ((void*)0)));
15727 }
15728 _bala_iterator_unref0 (field_it)((field_it == ((void*)0)) ? ((void*)0) : (field_it = (bala_iterator_unref
(field_it), ((void*)0))))
;
15729 _bala_ccode_node_unref0 (clist)((clist == ((void*)0)) ? ((void*)0) : (clist = (bala_ccode_node_unref
(clist), ((void*)0))))
;
15730 } else {
15731 BalaTargetValue* instance = NULL((void*)0);
15732 BalaDataType* _tmp108_;
15733 BalaDataType* _tmp109_;
15734 BalaTargetValue* _tmp110_;
15735 BalaIterator* field_it = NULL((void*)0);
15736 BalaStruct* _tmp111_;
15737 BalaList* _tmp112_;
15738 BalaIterator* _tmp113_;
15739 BalaTargetValue* _tmp138_;
15740 _tmp108_ = bala_expression_get_value_type ((BalaExpression*) list);
15741 _tmp109_ = _tmp108_;
15742 _tmp110_ = bala_ccode_base_module_create_temp_value (self, _tmp109_, TRUE(!(0)), (BalaCodeNode*) list, NULL((void*)0));
15743 instance = _tmp110_;
15744 _tmp111_ = st;
15745 _tmp112_ = bala_struct_get_fields (_tmp111_);
15746 _tmp113_ = bala_iterable_iterator ((BalaIterable*) _tmp112_);
15747 field_it = _tmp113_;
15748 {
15749 BalaList* _expr_list = NULL((void*)0);
15750 BalaList* _tmp114_;
15751 BalaList* _tmp115_;
15752 gint _expr_size = 0;
15753 BalaList* _tmp116_;
15754 gint _tmp117_;
15755 gint _tmp118_;
15756 gint _expr_index = 0;
15757 _tmp114_ = bala_initializer_list_get_initializers (list);
15758 _tmp115_ = _bala_iterable_ref0 (_tmp114_);
15759 _expr_list = _tmp115_;
15760 _tmp116_ = _expr_list;
15761 _tmp117_ = bala_collection_get_size ((BalaCollection*) _tmp116_);
15762 _tmp118_ = _tmp117_;
15763 _expr_size = _tmp118_;
15764 _expr_index = -1;
15765 while (TRUE(!(0))) {
15766 gint _tmp119_;
15767 gint _tmp120_;
15768 BalaExpression* expr = NULL((void*)0);
15769 BalaList* _tmp121_;
15770 gpointer _tmp122_;
15771 BalaField* field = NULL((void*)0);
15772 BalaField* _tmp130_;
15773 BalaTargetValue* _tmp131_;
15774 BalaExpression* _tmp132_;
15775 BalaTargetValue* _tmp133_;
15776 BalaTargetValue* _tmp134_;
15777 BalaExpression* _tmp135_;
15778 BalaSourceReference* _tmp136_;
15779 BalaSourceReference* _tmp137_;
15780 _expr_index = _expr_index + 1;
15781 _tmp119_ = _expr_index;
15782 _tmp120_ = _expr_size;
15783 if (!(_tmp119_ < _tmp120_)) {
15784 break;
15785 }
15786 _tmp121_ = _expr_list;
15787 _tmp122_ = bala_list_get (_tmp121_, _expr_index);
15788 expr = (BalaExpression*) _tmp122_;
15789 field = NULL((void*)0);
15790 while (TRUE(!(0))) {
15791 BalaField* _tmp123_;
15792 BalaIterator* _tmp124_;
15793 BalaIterator* _tmp125_;
15794 gpointer _tmp126_;
15795 BalaField* _tmp127_;
15796 BalaMemberBinding _tmp128_;
15797 BalaMemberBinding _tmp129_;
15798 _tmp123_ = field;
15799 if (!(_tmp123_ == NULL((void*)0))) {
15800 break;
15801 }
15802 _tmp124_ = field_it;
15803 bala_iterator_next (_tmp124_);
15804 _tmp125_ = field_it;
15805 _tmp126_ = bala_iterator_get (_tmp125_);
15806 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
15807 field = (BalaField*) _tmp126_;
15808 _tmp127_ = field;
15809 _tmp128_ = bala_field_get_binding (_tmp127_);
15810 _tmp129_ = _tmp128_;
15811 if (_tmp129_ != BALA_MEMBER_BINDING_INSTANCE) {
15812 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
15813 field = NULL((void*)0);
15814 }
15815 }
15816 _tmp130_ = field;
15817 _tmp131_ = instance;
15818 _tmp132_ = expr;
15819 _tmp133_ = bala_expression_get_target_value (_tmp132_);
15820 _tmp134_ = _tmp133_;
15821 _tmp135_ = expr;
15822 _tmp136_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp135_);
15823 _tmp137_ = _tmp136_;
15824 bala_code_generator_store_field ((BalaCodeGenerator*) self, _tmp130_, _tmp131_, _tmp134_, _tmp137_);
15825 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
15826 _bala_code_node_unref0 (expr)((expr == ((void*)0)) ? ((void*)0) : (expr = (bala_code_node_unref
(expr), ((void*)0))))
;
15827 }
15828 _bala_iterable_unref0 (_expr_list)((_expr_list == ((void*)0)) ? ((void*)0) : (_expr_list = (bala_iterable_unref
(_expr_list), ((void*)0))))
;
15829 }
15830 _tmp138_ = instance;
15831 bala_expression_set_target_value ((BalaExpression*) list, _tmp138_);
15832 _bala_iterator_unref0 (field_it)((field_it == ((void*)0)) ? ((void*)0) : (field_it = (bala_iterator_unref
(field_it), ((void*)0))))
;
15833 _bala_target_value_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_target_value_unref
(instance), ((void*)0))))
;
15834 }
15835 } else {
15836 BalaCCodeInitializerList* clist = NULL((void*)0);
15837 BalaCCodeInitializerList* _tmp139_;
15838 BalaCCodeInitializerList* _tmp152_;
15839 _tmp139_ = bala_ccode_initializer_list_new ();
15840 clist = _tmp139_;
15841 {
15842 BalaList* _expr_list = NULL((void*)0);
15843 BalaList* _tmp140_;
15844 BalaList* _tmp141_;
15845 gint _expr_size = 0;
15846 BalaList* _tmp142_;
15847 gint _tmp143_;
15848 gint _tmp144_;
15849 gint _expr_index = 0;
15850 _tmp140_ = bala_initializer_list_get_initializers (list);
15851 _tmp141_ = _bala_iterable_ref0 (_tmp140_);
15852 _expr_list = _tmp141_;
15853 _tmp142_ = _expr_list;
15854 _tmp143_ = bala_collection_get_size ((BalaCollection*) _tmp142_);
15855 _tmp144_ = _tmp143_;
15856 _expr_size = _tmp144_;
15857 _expr_index = -1;
15858 while (TRUE(!(0))) {
15859 gint _tmp145_;
15860 gint _tmp146_;
15861 BalaExpression* expr = NULL((void*)0);
15862 BalaList* _tmp147_;
15863 gpointer _tmp148_;
15864 BalaCCodeInitializerList* _tmp149_;
15865 BalaExpression* _tmp150_;
15866 BalaCCodeExpression* _tmp151_;
15867 _expr_index = _expr_index + 1;
15868 _tmp145_ = _expr_index;
15869 _tmp146_ = _expr_size;
15870 if (!(_tmp145_ < _tmp146_)) {
15871 break;
15872 }
15873 _tmp147_ = _expr_list;
15874 _tmp148_ = bala_list_get (_tmp147_, _expr_index);
15875 expr = (BalaExpression*) _tmp148_;
15876 _tmp149_ = clist;
15877 _tmp150_ = expr;
15878 _tmp151_ = bala_get_cvalue (_tmp150_);
15879 bala_ccode_initializer_list_append (_tmp149_, _tmp151_);
15880 _bala_code_node_unref0 (expr)((expr == ((void*)0)) ? ((void*)0) : (expr = (bala_code_node_unref
(expr), ((void*)0))))
;
15881 }
15882 _bala_iterable_unref0 (_expr_list)((_expr_list == ((void*)0)) ? ((void*)0) : (_expr_list = (bala_iterable_unref
(_expr_list), ((void*)0))))
;
15883 }
15884 _tmp152_ = clist;
15885 bala_set_cvalue ((BalaExpression*) list, (BalaCCodeExpression*) _tmp152_);
15886 _bala_ccode_node_unref0 (clist)((clist == ((void*)0)) ? ((void*)0) : (clist = (bala_ccode_node_unref
(clist), ((void*)0))))
;
15887 }
15888}
15889
15890BalaLocalVariable*
15891bala_ccode_base_module_get_temp_variable (BalaCCodeBaseModule* self,
15892 BalaDataType* type,
15893 gboolean value_owned,
15894 BalaCodeNode* node_reference,
15895 gboolean init)
15896{
15897 BalaDataType* var_type = NULL((void*)0);
15898 BalaDataType* _tmp0_;
15899 BalaDataType* _tmp1_;
15900 BalaLocalVariable* local = NULL((void*)0);
15901 BalaDataType* _tmp2_;
15902 gint _tmp3_;
15903 gint _tmp4_;
15904 gchar* _tmp5_;
15905 gchar* _tmp6_;
15906 BalaLocalVariable* _tmp7_;
15907 BalaLocalVariable* _tmp8_;
15908 BalaLocalVariable* _tmp9_;
15909 gint _tmp13_;
15910 gint _tmp14_;
15911 BalaLocalVariable* result = NULL((void*)0);
15912 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
15913 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
15914 _tmp0_ = bala_data_type_copy (type);
15915 var_type = _tmp0_;
15916 _tmp1_ = var_type;
15917 bala_data_type_set_value_owned (_tmp1_, value_owned);
15918 _tmp2_ = var_type;
15919 _tmp3_ = bala_ccode_base_module_get_next_temp_var_id (self);
15920 _tmp4_ = _tmp3_;
15921 _tmp5_ = g_strdup_printf ("_tmp%d_", _tmp4_);
15922 _tmp6_ = _tmp5_;
15923 _tmp7_ = bala_local_variable_new (_tmp2_, _tmp6_, NULL((void*)0), NULL((void*)0));
15924 _tmp8_ = _tmp7_;
15925 _g_free0 (_tmp6_)(_tmp6_ = (g_free (_tmp6_), ((void*)0)));
15926 local = _tmp8_;
15927 _tmp9_ = local;
15928 bala_local_variable_set_init (_tmp9_, init);
15929 if (node_reference != NULL((void*)0)) {
15930 BalaLocalVariable* _tmp10_;
15931 BalaSourceReference* _tmp11_;
15932 BalaSourceReference* _tmp12_;
15933 _tmp10_ = local;
15934 _tmp11_ = bala_code_node_get_source_reference (node_reference);
15935 _tmp12_ = _tmp11_;
15936 bala_code_node_set_source_reference ((BalaCodeNode*) _tmp10_, _tmp12_);
15937 }
15938 _tmp13_ = bala_ccode_base_module_get_next_temp_var_id (self);
15939 _tmp14_ = _tmp13_;
15940 bala_ccode_base_module_set_next_temp_var_id (self, _tmp14_ + 1);
15941 result = local;
15942 _bala_code_node_unref0 (var_type)((var_type == ((void*)0)) ? ((void*)0) : (var_type = (bala_code_node_unref
(var_type), ((void*)0))))
;
15943 return result;
15944}
15945
15946static gboolean
15947bala_ccode_base_module_is_in_generic_type (BalaCCodeBaseModule* self,
15948 BalaGenericType* type)
15949{
15950 gboolean _tmp0_ = FALSE(0);
15951 gboolean _tmp1_ = FALSE(0);
15952 BalaSymbol* _tmp2_;
15953 BalaSymbol* _tmp3_;
15954 gboolean result = FALSE(0);
15955 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
15956 g_return_val_if_fail (type != NULL, FALSE)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return ((0)); } } while (0)
;
15957 _tmp2_ = bala_ccode_base_module_get_current_symbol (self);
15958 _tmp3_ = _tmp2_;
15959 if (_tmp3_ != NULL((void*)0)) {
15960 BalaTypeParameter* _tmp4_;
15961 BalaTypeParameter* _tmp5_;
15962 BalaSymbol* _tmp6_;
15963 BalaSymbol* _tmp7_;
15964 _tmp4_ = bala_generic_type_get_type_parameter (type);
15965 _tmp5_ = _tmp4_;
15966 _tmp6_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp5_);
15967 _tmp7_ = _tmp6_;
15968 _tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, BALA_TYPE_TYPESYMBOL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp7_); GType __t = ((bala_typesymbol_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
15969 } else {
15970 _tmp1_ = FALSE(0);
15971 }
15972 if (_tmp1_) {
15973 gboolean _tmp8_ = FALSE(0);
15974 BalaMethod* _tmp9_;
15975 BalaMethod* _tmp10_;
15976 _tmp9_ = bala_ccode_base_module_get_current_method (self);
15977 _tmp10_ = _tmp9_;
15978 if (_tmp10_ == NULL((void*)0)) {
15979 _tmp8_ = TRUE(!(0));
15980 } else {
15981 BalaMethod* _tmp11_;
15982 BalaMethod* _tmp12_;
15983 BalaMemberBinding _tmp13_;
15984 BalaMemberBinding _tmp14_;
15985 _tmp11_ = bala_ccode_base_module_get_current_method (self);
15986 _tmp12_ = _tmp11_;
15987 _tmp13_ = bala_method_get_binding (_tmp12_);
15988 _tmp14_ = _tmp13_;
15989 _tmp8_ = _tmp14_ == BALA_MEMBER_BINDING_INSTANCE;
15990 }
15991 _tmp0_ = _tmp8_;
15992 } else {
15993 _tmp0_ = FALSE(0);
15994 }
15995 if (_tmp0_) {
15996 result = TRUE(!(0));
15997 return result;
15998 } else {
15999 result = FALSE(0);
16000 return result;
16001 }
16002}
16003
16004static void
16005bala_ccode_base_module_require_generic_accessors (BalaCCodeBaseModule* self,
16006 BalaInterface* iface)
16007{
16008 BalaAttribute* _tmp0_;
16009 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
16010 g_return_if_fail (iface != NULL)do { if ((iface != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "iface != NULL"
); return; } } while (0)
;
16011 _tmp0_ = bala_code_node_get_attribute ((BalaCodeNode*) iface, "GenericAccessors");
16012 if (_tmp0_ == NULL((void*)0)) {
16013 BalaSourceReference* _tmp1_;
16014 BalaSourceReference* _tmp2_;
16015 gchar* _tmp3_;
16016 gchar* _tmp4_;
16017 gchar* _tmp5_;
16018 gchar* _tmp6_;
16019 _tmp1_ = bala_code_node_get_source_reference ((BalaCodeNode*) iface);
16020 _tmp2_ = _tmp1_;
16021 _tmp3_ = bala_symbol_get_full_name ((BalaSymbol*) iface);
16022 _tmp4_ = _tmp3_;
16023 _tmp5_ = g_strdup_printf ("missing generic type for interface `%s', add GenericAccessors attribut" \
16024"e to interface declaration", _tmp4_);
16025 _tmp6_ = _tmp5_;
16026 bala_report_error (_tmp2_, _tmp6_);
16027 _g_free0 (_tmp6_)(_tmp6_ = (g_free (_tmp6_), ((void*)0)));
16028 _g_free0 (_tmp4_)(_tmp4_ = (g_free (_tmp4_), ((void*)0)));
16029 }
16030}
16031
16032BalaCCodeExpression*
16033bala_ccode_base_module_get_type_id_expression (BalaCCodeBaseModule* self,
16034 BalaDataType* type,
16035 gboolean is_chainup)
16036{
16037 BalaCCodeExpression* result = NULL((void*)0);
16038 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
16039 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
16040 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16041 BalaTypeParameter* type_parameter = NULL((void*)0);
16042 BalaTypeParameter* _tmp0_;
16043 BalaTypeParameter* _tmp1_;
16044 BalaTypeParameter* _tmp2_;
16045 gchar* var_name = NULL((void*)0);
16046 BalaTypeParameter* _tmp3_;
16047 const gchar* _tmp4_;
16048 const gchar* _tmp5_;
16049 gchar* _tmp6_;
16050 gchar* _tmp7_;
16051 gchar* _tmp8_;
16052 gchar* _tmp9_;
16053 BalaTypeParameter* _tmp10_;
16054 BalaSymbol* _tmp11_;
16055 BalaSymbol* _tmp12_;
16056 gboolean _tmp44_ = FALSE(0);
16057 gboolean _tmp45_ = FALSE(0);
16058 _tmp0_ = bala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
);
16059 _tmp1_ = _tmp0_;
16060 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
16061 type_parameter = _tmp2_;
16062 _tmp3_ = type_parameter;
16063 _tmp4_ = bala_symbol_get_name ((BalaSymbol*) _tmp3_);
16064 _tmp5_ = _tmp4_;
16065 _tmp6_ = g_ascii_strdown (_tmp5_, (gssize) -1);
16066 _tmp7_ = _tmp6_;
16067 _tmp8_ = g_strdup_printf ("%s_type", _tmp7_);
16068 _tmp9_ = _tmp8_;
16069 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
16070 var_name = _tmp9_;
16071 _tmp10_ = type_parameter;
16072 _tmp11_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp10_);
16073 _tmp12_ = _tmp11_;
16074 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp12_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16075 BalaInterface* iface = NULL((void*)0);
16076 BalaTypeParameter* _tmp13_;
16077 BalaSymbol* _tmp14_;
16078 BalaSymbol* _tmp15_;
16079 BalaInterface* _tmp16_;
16080 BalaInterface* _tmp17_;
16081 gchar* method_name = NULL((void*)0);
16082 BalaTypeParameter* _tmp18_;
16083 const gchar* _tmp19_;
16084 const gchar* _tmp20_;
16085 gchar* _tmp21_;
16086 gchar* _tmp22_;
16087 gchar* _tmp23_;
16088 gchar* _tmp24_;
16089 BalaCCodeFunctionCall* cast_self = NULL((void*)0);
16090 BalaInterface* _tmp25_;
16091 gchar* _tmp26_;
16092 gchar* _tmp27_;
16093 BalaCCodeIdentifier* _tmp28_;
16094 BalaCCodeIdentifier* _tmp29_;
16095 BalaCCodeFunctionCall* _tmp30_;
16096 BalaCCodeFunctionCall* _tmp31_;
16097 BalaCCodeFunctionCall* _tmp32_;
16098 BalaCCodeExpression* _tmp33_;
16099 BalaCCodeExpression* _tmp34_;
16100 BalaCCodeFunctionCall* function_call = NULL((void*)0);
16101 BalaCCodeFunctionCall* _tmp35_;
16102 const gchar* _tmp36_;
16103 BalaCCodeMemberAccess* _tmp37_;
16104 BalaCCodeMemberAccess* _tmp38_;
16105 BalaCCodeFunctionCall* _tmp39_;
16106 BalaCCodeFunctionCall* _tmp40_;
16107 BalaCCodeFunctionCall* _tmp41_;
16108 BalaCCodeExpression* _tmp42_;
16109 BalaCCodeExpression* _tmp43_;
16110 _tmp13_ = type_parameter;
16111 _tmp14_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp13_);
16112 _tmp15_ = _tmp14_;
16113 _tmp16_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, BALA_TYPE_INTERFACE, BalaInterface)(((BalaInterface*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp15_), ((bala_interface_get_type ())))))
);
16114 iface = _tmp16_;
16115 _tmp17_ = iface;
16116 bala_ccode_base_module_require_generic_accessors (self, _tmp17_);
16117 _tmp18_ = type_parameter;
16118 _tmp19_ = bala_symbol_get_name ((BalaSymbol*) _tmp18_);
16119 _tmp20_ = _tmp19_;
16120 _tmp21_ = g_ascii_strdown (_tmp20_, (gssize) -1);
16121 _tmp22_ = _tmp21_;
16122 _tmp23_ = g_strdup_printf ("get_%s_type", _tmp22_);
16123 _tmp24_ = _tmp23_;
16124 _g_free0 (_tmp22_)(_tmp22_ = (g_free (_tmp22_), ((void*)0)));
16125 method_name = _tmp24_;
16126 _tmp25_ = iface;
16127 _tmp26_ = bala_get_ccode_type_get_function ((BalaObjectTypeSymbol*) _tmp25_);
16128 _tmp27_ = _tmp26_;
16129 _tmp28_ = bala_ccode_identifier_new (_tmp27_);
16130 _tmp29_ = _tmp28_;
16131 _tmp30_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp29_);
16132 _tmp31_ = _tmp30_;
16133 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
16134 _g_free0 (_tmp27_)(_tmp27_ = (g_free (_tmp27_), ((void*)0)));
16135 cast_self = _tmp31_;
16136 _tmp32_ = cast_self;
16137 _tmp33_ = bala_ccode_base_module_get_this_cexpression (self);
16138 _tmp34_ = _tmp33_;
16139 bala_ccode_function_call_add_argument (_tmp32_, _tmp34_);
16140 _bala_ccode_node_unref0 (_tmp34_)((_tmp34_ == ((void*)0)) ? ((void*)0) : (_tmp34_ = (bala_ccode_node_unref
(_tmp34_), ((void*)0))))
;
16141 _tmp35_ = cast_self;
16142 _tmp36_ = method_name;
16143 _tmp37_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp35_, _tmp36_);
16144 _tmp38_ = _tmp37_;
16145 _tmp39_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp38_);
16146 _tmp40_ = _tmp39_;
16147 _bala_ccode_node_unref0 (_tmp38_)((_tmp38_ == ((void*)0)) ? ((void*)0) : (_tmp38_ = (bala_ccode_node_unref
(_tmp38_), ((void*)0))))
;
16148 function_call = _tmp40_;
16149 _tmp41_ = function_call;
16150 _tmp42_ = bala_ccode_base_module_get_this_cexpression (self);
16151 _tmp43_ = _tmp42_;
16152 bala_ccode_function_call_add_argument (_tmp41_, _tmp43_);
16153 _bala_ccode_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_ccode_node_unref
(_tmp43_), ((void*)0))))
;
16154 result = (BalaCCodeExpression*) function_call;
16155 _bala_ccode_node_unref0 (cast_self)((cast_self == ((void*)0)) ? ((void*)0) : (cast_self = (bala_ccode_node_unref
(cast_self), ((void*)0))))
;
16156 _g_free0 (method_name)(method_name = (g_free (method_name), ((void*)0)));
16157 _bala_code_node_unref0 (iface)((iface == ((void*)0)) ? ((void*)0) : (iface = (bala_code_node_unref
(iface), ((void*)0))))
;
16158 _g_free0 (var_name)(var_name = (g_free (var_name), ((void*)0)));
16159 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16160 return result;
16161 }
16162 if (bala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
)) {
16163 _tmp45_ = !is_chainup;
16164 } else {
16165 _tmp45_ = FALSE(0);
16166 }
16167 if (_tmp45_) {
16168 gboolean _tmp46_;
16169 gboolean _tmp47_;
16170 _tmp46_ = bala_ccode_base_module_get_in_creation_method (self);
16171 _tmp47_ = _tmp46_;
16172 _tmp44_ = !_tmp47_;
16173 } else {
16174 _tmp44_ = FALSE(0);
16175 }
16176 if (_tmp44_) {
16177 BalaCCodeExpression* _tmp48_;
16178 BalaCCodeExpression* _tmp49_;
16179 BalaCCodeMemberAccess* _tmp50_;
16180 BalaCCodeMemberAccess* _tmp51_;
16181 const gchar* _tmp52_;
16182 BalaCCodeMemberAccess* _tmp53_;
16183 BalaCCodeExpression* _tmp54_;
16184 _tmp48_ = bala_ccode_base_module_get_this_cexpression (self);
16185 _tmp49_ = _tmp48_;
16186 _tmp50_ = bala_ccode_member_access_new_pointer (_tmp49_, "priv");
16187 _tmp51_ = _tmp50_;
16188 _tmp52_ = var_name;
16189 _tmp53_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp51_, _tmp52_);
16190 _tmp54_ = (BalaCCodeExpression*) _tmp53_;
16191 _bala_ccode_node_unref0 (_tmp51_)((_tmp51_ == ((void*)0)) ? ((void*)0) : (_tmp51_ = (bala_ccode_node_unref
(_tmp51_), ((void*)0))))
;
16192 _bala_ccode_node_unref0 (_tmp49_)((_tmp49_ == ((void*)0)) ? ((void*)0) : (_tmp49_ = (bala_ccode_node_unref
(_tmp49_), ((void*)0))))
;
16193 result = _tmp54_;
16194 _g_free0 (var_name)(var_name = (g_free (var_name), ((void*)0)));
16195 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16196 return result;
16197 } else {
16198 const gchar* _tmp55_;
16199 BalaCCodeExpression* _tmp56_;
16200 _tmp55_ = var_name;
16201 _tmp56_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp55_);
16202 result = _tmp56_;
16203 _g_free0 (var_name)(var_name = (g_free (var_name), ((void*)0)));
16204 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16205 return result;
16206 }
16207 _g_free0 (var_name)(var_name = (g_free (var_name), ((void*)0)));
16208 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16209 } else {
16210 gchar* type_id = NULL((void*)0);
16211 gchar* _tmp57_;
16212 const gchar* _tmp58_;
16213 const gchar* _tmp61_;
16214 BalaCCodeIdentifier* _tmp62_;
16215 _tmp57_ = bala_get_ccode_type_id ((BalaCodeNode*) type);
16216 type_id = _tmp57_;
16217 _tmp58_ = type_id;
16218 if (g_strcmp0 (_tmp58_, "") == 0) {
16219 gchar* _tmp59_;
16220 _tmp59_ = g_strdup ("G_TYPE_INVALID");
16221 _g_free0 (type_id)(type_id = (g_free (type_id), ((void*)0)));
16222 type_id = _tmp59_;
16223 } else {
16224 BalaCCodeFile* _tmp60_;
16225 _tmp60_ = self->cfile;
16226 bala_ccode_base_module_generate_type_declaration (self, type, _tmp60_);
16227 }
16228 _tmp61_ = type_id;
16229 _tmp62_ = bala_ccode_identifier_new (_tmp61_);
16230 result = (BalaCCodeExpression*) _tmp62_;
16231 _g_free0 (type_id)(type_id = (g_free (type_id), ((void*)0)));
16232 return result;
16233 }
16234}
16235
16236static BalaCCodeExpression*
16237bala_ccode_base_module_real_get_dup_func_expression (BalaCCodeBaseModule* self,
16238 BalaDataType* type,
16239 BalaSourceReference* source_reference,
16240 gboolean is_chainup)
16241{
16242 BalaCCodeExpression* result = NULL((void*)0);
16243 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
16244 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ERROR_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_error_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16245 BalaCCodeIdentifier* _tmp0_;
16246 _tmp0_ = bala_ccode_identifier_new ("g_error_copy");
16247 result = (BalaCCodeExpression*) _tmp0_;
16248 return result;
16249 } else {
16250 BalaTypeSymbol* _tmp1_;
16251 BalaTypeSymbol* _tmp2_;
16252 _tmp1_ = bala_data_type_get_type_symbol (type);
16253 _tmp2_ = _tmp1_;
16254 if (_tmp2_ != NULL((void*)0)) {
16255 gchar* dup_function = NULL((void*)0);
16256 BalaClass* cl = NULL((void*)0);
16257 BalaTypeSymbol* _tmp3_;
16258 BalaTypeSymbol* _tmp4_;
16259 BalaTypeSymbol* _tmp5_;
16260 BalaTypeSymbol* _tmp6_;
16261 const gchar* _tmp53_;
16262 BalaCCodeIdentifier* _tmp54_;
16263 _tmp3_ = bala_data_type_get_type_symbol (type);
16264 _tmp4_ = _tmp3_;
16265 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp4_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp4_) : NULL((void*)0);
16266 _tmp5_ = bala_data_type_get_type_symbol (type);
16267 _tmp6_ = _tmp5_;
16268 if (bala_is_reference_counting (_tmp6_)) {
16269 BalaTypeSymbol* _tmp7_;
16270 BalaTypeSymbol* _tmp8_;
16271 gchar* _tmp9_;
16272 gboolean _tmp10_ = FALSE(0);
16273 BalaTypeSymbol* _tmp11_;
16274 BalaTypeSymbol* _tmp12_;
16275 _tmp7_ = bala_data_type_get_type_symbol (type);
16276 _tmp8_ = _tmp7_;
16277 _tmp9_ = bala_get_ccode_ref_function ((BalaTypeSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, BALA_TYPE_OBJECT_TYPE_SYMBOL, BalaObjectTypeSymbol)(((BalaObjectTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp8_), ((bala_object_type_symbol_get_type ())))))
);
16278 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16279 dup_function = _tmp9_;
16280 _tmp11_ = bala_data_type_get_type_symbol (type);
16281 _tmp12_ = _tmp11_;
16282 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp12_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16283 const gchar* _tmp13_;
16284 _tmp13_ = dup_function;
16285 _tmp10_ = _tmp13_ == NULL((void*)0);
16286 } else {
16287 _tmp10_ = FALSE(0);
16288 }
16289 if (_tmp10_) {
16290 BalaTypeSymbol* _tmp14_;
16291 BalaTypeSymbol* _tmp15_;
16292 gchar* _tmp16_;
16293 gchar* _tmp17_;
16294 gchar* _tmp18_;
16295 gchar* _tmp19_;
16296 BalaCCodeInvalidExpression* _tmp20_;
16297 _tmp14_ = bala_data_type_get_type_symbol (type);
16298 _tmp15_ = _tmp14_;
16299 _tmp16_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp15_);
16300 _tmp17_ = _tmp16_;
16301 _tmp18_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
16302"rface declaration if unsure", _tmp17_);
16303 _tmp19_ = _tmp18_;
16304 bala_report_error (source_reference, _tmp19_);
16305 _g_free0 (_tmp19_)(_tmp19_ = (g_free (_tmp19_), ((void*)0)));
16306 _g_free0 (_tmp17_)(_tmp17_ = (g_free (_tmp17_), ((void*)0)));
16307 _tmp20_ = bala_ccode_invalid_expression_new ();
16308 result = (BalaCCodeExpression*) _tmp20_;
16309 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16310 return result;
16311 }
16312 } else {
16313 gboolean _tmp21_ = FALSE(0);
16314 BalaClass* _tmp22_;
16315 _tmp22_ = cl;
16316 if (_tmp22_ != NULL((void*)0)) {
16317 BalaClass* _tmp23_;
16318 gboolean _tmp24_;
16319 gboolean _tmp25_;
16320 _tmp23_ = cl;
16321 _tmp24_ = bala_class_get_is_immutable (_tmp23_);
16322 _tmp25_ = _tmp24_;
16323 _tmp21_ = _tmp25_;
16324 } else {
16325 _tmp21_ = FALSE(0);
16326 }
16327 if (_tmp21_) {
16328 BalaTypeSymbol* _tmp26_;
16329 BalaTypeSymbol* _tmp27_;
16330 gchar* _tmp28_;
16331 const gchar* _tmp29_;
16332 _tmp26_ = bala_data_type_get_type_symbol (type);
16333 _tmp27_ = _tmp26_;
16334 _tmp28_ = bala_get_ccode_dup_function (_tmp27_);
16335 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16336 dup_function = _tmp28_;
16337 _tmp29_ = dup_function;
16338 if (_tmp29_ == NULL((void*)0)) {
16339 gchar* _tmp30_;
16340 _tmp30_ = g_strdup ("");
16341 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16342 dup_function = _tmp30_;
16343 }
16344 } else {
16345 BalaTypeSymbol* _tmp31_;
16346 BalaTypeSymbol* _tmp32_;
16347 _tmp31_ = bala_data_type_get_type_symbol (type);
16348 _tmp32_ = _tmp31_;
16349 if (bala_get_ccode_is_gboxed (_tmp32_)) {
16350 gchar* _tmp33_;
16351 const gchar* _tmp34_;
16352 _tmp33_ = bala_ccode_base_module_generate_dup_func_wrapper (self, type);
16353 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16354 dup_function = _tmp33_;
16355 _tmp34_ = dup_function;
16356 if (_tmp34_ == NULL((void*)0)) {
16357 gchar* _tmp35_;
16358 _tmp35_ = g_strdup ("");
16359 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16360 dup_function = _tmp35_;
16361 }
16362 } else {
16363 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_value_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16364 BalaTypeSymbol* _tmp36_;
16365 BalaTypeSymbol* _tmp37_;
16366 gchar* _tmp38_;
16367 gboolean _tmp39_ = FALSE(0);
16368 const gchar* _tmp40_;
16369 _tmp36_ = bala_data_type_get_type_symbol (type);
16370 _tmp37_ = _tmp36_;
16371 _tmp38_ = bala_get_ccode_dup_function (_tmp37_);
16372 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16373 dup_function = _tmp38_;
16374 _tmp40_ = dup_function;
16375 if (_tmp40_ == NULL((void*)0)) {
16376 gboolean _tmp41_;
16377 gboolean _tmp42_;
16378 _tmp41_ = bala_data_type_get_nullable (type);
16379 _tmp42_ = _tmp41_;
16380 _tmp39_ = _tmp42_;
16381 } else {
16382 _tmp39_ = FALSE(0);
16383 }
16384 if (_tmp39_) {
16385 gchar* _tmp43_;
16386 _tmp43_ = bala_ccode_base_module_generate_struct_dup_wrapper (self, G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_VALUE_TYPE, BalaValueType)(((BalaValueType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_value_type_get_type ())))))
);
16387 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16388 dup_function = _tmp43_;
16389 } else {
16390 const gchar* _tmp44_;
16391 _tmp44_ = dup_function;
16392 if (_tmp44_ == NULL((void*)0)) {
16393 gchar* _tmp45_;
16394 _tmp45_ = g_strdup ("");
16395 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16396 dup_function = _tmp45_;
16397 }
16398 }
16399 } else {
16400 BalaTypeSymbol* _tmp46_;
16401 BalaTypeSymbol* _tmp47_;
16402 const gchar* _tmp48_;
16403 const gchar* _tmp49_;
16404 gchar* _tmp50_;
16405 gchar* _tmp51_;
16406 BalaCCodeInvalidExpression* _tmp52_;
16407 _tmp46_ = bala_data_type_get_type_symbol (type);
16408 _tmp47_ = _tmp46_;
16409 _tmp48_ = bala_symbol_get_name ((BalaSymbol*) _tmp47_);
16410 _tmp49_ = _tmp48_;
16411 _tmp50_ = g_strdup_printf ("duplicating %s instance, use unowned variable or explicitly invoke cop" \
16412"y method", _tmp49_);
16413 _tmp51_ = _tmp50_;
16414 bala_report_error (source_reference, _tmp51_);
16415 _g_free0 (_tmp51_)(_tmp51_ = (g_free (_tmp51_), ((void*)0)));
16416 _tmp52_ = bala_ccode_invalid_expression_new ();
16417 result = (BalaCCodeExpression*) _tmp52_;
16418 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16419 return result;
16420 }
16421 }
16422 }
16423 }
16424 _tmp53_ = dup_function;
16425 _tmp54_ = bala_ccode_identifier_new (_tmp53_);
16426 result = (BalaCCodeExpression*) _tmp54_;
16427 _g_free0 (dup_function)(dup_function = (g_free (dup_function), ((void*)0)));
16428 return result;
16429 } else {
16430 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16431 BalaTypeParameter* type_parameter = NULL((void*)0);
16432 BalaTypeParameter* _tmp55_;
16433 BalaTypeParameter* _tmp56_;
16434 BalaTypeParameter* _tmp57_;
16435 gchar* func_name = NULL((void*)0);
16436 BalaTypeParameter* _tmp58_;
16437 const gchar* _tmp59_;
16438 const gchar* _tmp60_;
16439 gchar* _tmp61_;
16440 gchar* _tmp62_;
16441 gchar* _tmp63_;
16442 gchar* _tmp64_;
16443 BalaTypeParameter* _tmp65_;
16444 BalaSymbol* _tmp66_;
16445 BalaSymbol* _tmp67_;
16446 gboolean _tmp99_ = FALSE(0);
16447 gboolean _tmp100_ = FALSE(0);
16448 _tmp55_ = bala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
);
16449 _tmp56_ = _tmp55_;
16450 _tmp57_ = _bala_code_node_ref0 (_tmp56_);
16451 type_parameter = _tmp57_;
16452 _tmp58_ = type_parameter;
16453 _tmp59_ = bala_symbol_get_name ((BalaSymbol*) _tmp58_);
16454 _tmp60_ = _tmp59_;
16455 _tmp61_ = g_ascii_strdown (_tmp60_, (gssize) -1);
16456 _tmp62_ = _tmp61_;
16457 _tmp63_ = g_strdup_printf ("%s_dup_func", _tmp62_);
16458 _tmp64_ = _tmp63_;
16459 _g_free0 (_tmp62_)(_tmp62_ = (g_free (_tmp62_), ((void*)0)));
16460 func_name = _tmp64_;
16461 _tmp65_ = type_parameter;
16462 _tmp66_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp65_);
16463 _tmp67_ = _tmp66_;
16464 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp67_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp67_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16465 BalaInterface* iface = NULL((void*)0);
16466 BalaTypeParameter* _tmp68_;
16467 BalaSymbol* _tmp69_;
16468 BalaSymbol* _tmp70_;
16469 BalaInterface* _tmp71_;
16470 BalaInterface* _tmp72_;
16471 gchar* method_name = NULL((void*)0);
16472 BalaTypeParameter* _tmp73_;
16473 const gchar* _tmp74_;
16474 const gchar* _tmp75_;
16475 gchar* _tmp76_;
16476 gchar* _tmp77_;
16477 gchar* _tmp78_;
16478 gchar* _tmp79_;
16479 BalaCCodeFunctionCall* cast_self = NULL((void*)0);
16480 BalaInterface* _tmp80_;
16481 gchar* _tmp81_;
16482 gchar* _tmp82_;
16483 BalaCCodeIdentifier* _tmp83_;
16484 BalaCCodeIdentifier* _tmp84_;
16485 BalaCCodeFunctionCall* _tmp85_;
16486 BalaCCodeFunctionCall* _tmp86_;
16487 BalaCCodeFunctionCall* _tmp87_;
16488 BalaCCodeIdentifier* _tmp88_;
16489 BalaCCodeIdentifier* _tmp89_;
16490 BalaCCodeFunctionCall* function_call = NULL((void*)0);
16491 BalaCCodeFunctionCall* _tmp90_;
16492 const gchar* _tmp91_;
16493 BalaCCodeMemberAccess* _tmp92_;
16494 BalaCCodeMemberAccess* _tmp93_;
16495 BalaCCodeFunctionCall* _tmp94_;
16496 BalaCCodeFunctionCall* _tmp95_;
16497 BalaCCodeFunctionCall* _tmp96_;
16498 BalaCCodeIdentifier* _tmp97_;
16499 BalaCCodeIdentifier* _tmp98_;
16500 _tmp68_ = type_parameter;
16501 _tmp69_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp68_);
16502 _tmp70_ = _tmp69_;
16503 _tmp71_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, BALA_TYPE_INTERFACE, BalaInterface)(((BalaInterface*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp70_), ((bala_interface_get_type ())))))
);
16504 iface = _tmp71_;
16505 _tmp72_ = iface;
16506 bala_ccode_base_module_require_generic_accessors (self, _tmp72_);
16507 _tmp73_ = type_parameter;
16508 _tmp74_ = bala_symbol_get_name ((BalaSymbol*) _tmp73_);
16509 _tmp75_ = _tmp74_;
16510 _tmp76_ = g_ascii_strdown (_tmp75_, (gssize) -1);
16511 _tmp77_ = _tmp76_;
16512 _tmp78_ = g_strdup_printf ("get_%s_dup_func", _tmp77_);
16513 _tmp79_ = _tmp78_;
16514 _g_free0 (_tmp77_)(_tmp77_ = (g_free (_tmp77_), ((void*)0)));
16515 method_name = _tmp79_;
16516 _tmp80_ = iface;
16517 _tmp81_ = bala_get_ccode_type_get_function ((BalaObjectTypeSymbol*) _tmp80_);
16518 _tmp82_ = _tmp81_;
16519 _tmp83_ = bala_ccode_identifier_new (_tmp82_);
16520 _tmp84_ = _tmp83_;
16521 _tmp85_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp84_);
16522 _tmp86_ = _tmp85_;
16523 _bala_ccode_node_unref0 (_tmp84_)((_tmp84_ == ((void*)0)) ? ((void*)0) : (_tmp84_ = (bala_ccode_node_unref
(_tmp84_), ((void*)0))))
;
16524 _g_free0 (_tmp82_)(_tmp82_ = (g_free (_tmp82_), ((void*)0)));
16525 cast_self = _tmp86_;
16526 _tmp87_ = cast_self;
16527 _tmp88_ = bala_ccode_identifier_new ("self");
16528 _tmp89_ = _tmp88_;
16529 bala_ccode_function_call_add_argument (_tmp87_, (BalaCCodeExpression*) _tmp89_);
16530 _bala_ccode_node_unref0 (_tmp89_)((_tmp89_ == ((void*)0)) ? ((void*)0) : (_tmp89_ = (bala_ccode_node_unref
(_tmp89_), ((void*)0))))
;
16531 _tmp90_ = cast_self;
16532 _tmp91_ = method_name;
16533 _tmp92_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp90_, _tmp91_);
16534 _tmp93_ = _tmp92_;
16535 _tmp94_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp93_);
16536 _tmp95_ = _tmp94_;
16537 _bala_ccode_node_unref0 (_tmp93_)((_tmp93_ == ((void*)0)) ? ((void*)0) : (_tmp93_ = (bala_ccode_node_unref
(_tmp93_), ((void*)0))))
;
16538 function_call = _tmp95_;
16539 _tmp96_ = function_call;
16540 _tmp97_ = bala_ccode_identifier_new ("self");
16541 _tmp98_ = _tmp97_;
16542 bala_ccode_function_call_add_argument (_tmp96_, (BalaCCodeExpression*) _tmp98_);
16543 _bala_ccode_node_unref0 (_tmp98_)((_tmp98_ == ((void*)0)) ? ((void*)0) : (_tmp98_ = (bala_ccode_node_unref
(_tmp98_), ((void*)0))))
;
16544 result = (BalaCCodeExpression*) function_call;
16545 _bala_ccode_node_unref0 (cast_self)((cast_self == ((void*)0)) ? ((void*)0) : (cast_self = (bala_ccode_node_unref
(cast_self), ((void*)0))))
;
16546 _g_free0 (method_name)(method_name = (g_free (method_name), ((void*)0)));
16547 _bala_code_node_unref0 (iface)((iface == ((void*)0)) ? ((void*)0) : (iface = (bala_code_node_unref
(iface), ((void*)0))))
;
16548 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
16549 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16550 return result;
16551 }
16552 if (bala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
)) {
16553 _tmp100_ = !is_chainup;
16554 } else {
16555 _tmp100_ = FALSE(0);
16556 }
16557 if (_tmp100_) {
16558 gboolean _tmp101_;
16559 gboolean _tmp102_;
16560 _tmp101_ = bala_ccode_base_module_get_in_creation_method (self);
16561 _tmp102_ = _tmp101_;
16562 _tmp99_ = !_tmp102_;
16563 } else {
16564 _tmp99_ = FALSE(0);
16565 }
16566 if (_tmp99_) {
16567 BalaCCodeExpression* _tmp103_;
16568 BalaCCodeExpression* _tmp104_;
16569 BalaCCodeMemberAccess* _tmp105_;
16570 BalaCCodeMemberAccess* _tmp106_;
16571 const gchar* _tmp107_;
16572 BalaCCodeMemberAccess* _tmp108_;
16573 BalaCCodeExpression* _tmp109_;
16574 _tmp103_ = bala_ccode_base_module_get_this_cexpression (self);
16575 _tmp104_ = _tmp103_;
16576 _tmp105_ = bala_ccode_member_access_new_pointer (_tmp104_, "priv");
16577 _tmp106_ = _tmp105_;
16578 _tmp107_ = func_name;
16579 _tmp108_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp106_, _tmp107_);
16580 _tmp109_ = (BalaCCodeExpression*) _tmp108_;
16581 _bala_ccode_node_unref0 (_tmp106_)((_tmp106_ == ((void*)0)) ? ((void*)0) : (_tmp106_ = (bala_ccode_node_unref
(_tmp106_), ((void*)0))))
;
16582 _bala_ccode_node_unref0 (_tmp104_)((_tmp104_ == ((void*)0)) ? ((void*)0) : (_tmp104_ = (bala_ccode_node_unref
(_tmp104_), ((void*)0))))
;
16583 result = _tmp109_;
16584 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
16585 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16586 return result;
16587 } else {
16588 const gchar* _tmp110_;
16589 BalaCCodeExpression* _tmp111_;
16590 _tmp110_ = func_name;
16591 _tmp111_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp110_);
16592 result = _tmp111_;
16593 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
16594 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16595 return result;
16596 }
16597 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
16598 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
16599 } else {
16600 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16601 BalaPointerType* pointer_type = NULL((void*)0);
16602 BalaPointerType* _tmp112_;
16603 BalaPointerType* _tmp113_;
16604 BalaDataType* _tmp114_;
16605 BalaDataType* _tmp115_;
16606 BalaCCodeExpression* _tmp116_;
16607 _tmp112_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_POINTER_TYPE, BalaPointerType)(((BalaPointerType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_pointer_type_get_type ())))))
);
16608 pointer_type = _tmp112_;
16609 _tmp113_ = pointer_type;
16610 _tmp114_ = bala_pointer_type_get_base_type (_tmp113_);
16611 _tmp115_ = _tmp114_;
16612 _tmp116_ = bala_ccode_base_module_get_dup_func_expression (self, _tmp115_, source_reference, FALSE(0));
16613 result = _tmp116_;
16614 _bala_code_node_unref0 (pointer_type)((pointer_type == ((void*)0)) ? ((void*)0) : (pointer_type = (
bala_code_node_unref (pointer_type), ((void*)0))))
;
16615 return result;
16616 } else {
16617 BalaCCodeConstant* _tmp117_;
16618 _tmp117_ = bala_ccode_constant_new ("NULL");
16619 result = (BalaCCodeExpression*) _tmp117_;
16620 return result;
16621 }
16622 }
16623 }
16624 }
16625}
16626
16627BalaCCodeExpression*
16628bala_ccode_base_module_get_dup_func_expression (BalaCCodeBaseModule* self,
16629 BalaDataType* type,
16630 BalaSourceReference* source_reference,
16631 gboolean is_chainup)
16632{
16633 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
16634 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_dup_func_expression (self, type, source_reference, is_chainup);
16635}
16636
16637static void
16638bala_ccode_base_module_make_comparable_cexpression (BalaCCodeBaseModule* self,
16639 BalaDataType* * left_type,
16640 BalaCCodeExpression* * cleft,
16641 BalaDataType* * right_type,
16642 BalaCCodeExpression* * cright)
16643{
16644 BalaStruct* left_type_as_struct = NULL((void*)0);
16645 BalaTypeSymbol* _tmp0_;
16646 BalaTypeSymbol* _tmp1_;
16647 BalaStruct* right_type_as_struct = NULL((void*)0);
16648 BalaTypeSymbol* _tmp2_;
16649 BalaTypeSymbol* _tmp3_;
16650 BalaObjectTypeSymbol* left_type_as_object_type = NULL((void*)0);
16651 BalaTypeSymbol* _tmp4_;
16652 BalaTypeSymbol* _tmp5_;
16653 BalaObjectTypeSymbol* right_type_as_object_type = NULL((void*)0);
16654 BalaTypeSymbol* _tmp6_;
16655 BalaTypeSymbol* _tmp7_;
16656 gboolean _tmp8_ = FALSE(0);
16657 gboolean _tmp9_ = FALSE(0);
16658 gboolean _tmp10_ = FALSE(0);
16659 BalaObjectTypeSymbol* _tmp11_;
16660 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
16661 g_return_if_fail (*left_type != NULL)do { if ((*left_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "*left_type != NULL"
); return; } } while (0)
;
16662 g_return_if_fail (*cleft != NULL)do { if ((*cleft != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "*cleft != NULL"
); return; } } while (0)
;
16663 g_return_if_fail (*right_type != NULL)do { if ((*right_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "*right_type != NULL"
); return; } } while (0)
;
16664 g_return_if_fail (*cright != NULL)do { if ((*cright != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "*cright != NULL"
); return; } } while (0)
;
16665 _tmp0_ = bala_data_type_get_type_symbol (*left_type);
16666 _tmp1_ = _tmp0_;
16667 left_type_as_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp1_) : NULL((void*)0);
16668 _tmp2_ = bala_data_type_get_type_symbol (*right_type);
16669 _tmp3_ = _tmp2_;
16670 right_type_as_struct = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp3_) : NULL((void*)0);
16671 _tmp4_ = bala_data_type_get_type_symbol (*left_type);
16672 _tmp5_ = _tmp4_;
16673 left_type_as_object_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, BALA_TYPE_OBJECT_TYPE_SYMBOL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp5_); GType __t = ((bala_object_type_symbol_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
? ((BalaObjectTypeSymbol*) _tmp5_) : NULL((void*)0);
16674 _tmp6_ = bala_data_type_get_type_symbol (*right_type);
16675 _tmp7_ = _tmp6_;
16676 right_type_as_object_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, BALA_TYPE_OBJECT_TYPE_SYMBOL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp7_); GType __t = ((bala_object_type_symbol_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
? ((BalaObjectTypeSymbol*) _tmp7_) : NULL((void*)0);
16677 _tmp11_ = left_type_as_object_type;
16678 if (_tmp11_ != NULL((void*)0)) {
16679 gboolean _tmp12_ = FALSE(0);
16680 BalaObjectTypeSymbol* _tmp13_;
16681 _tmp13_ = left_type_as_object_type;
16682 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp13_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp13_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16683 _tmp12_ = TRUE(!(0));
16684 } else {
16685 BalaObjectTypeSymbol* _tmp14_;
16686 gboolean _tmp15_;
16687 gboolean _tmp16_;
16688 _tmp14_ = left_type_as_object_type;
16689 _tmp15_ = bala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp14_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp14_), ((bala_class_get_type ())))))
);
16690 _tmp16_ = _tmp15_;
16691 _tmp12_ = !_tmp16_;
16692 }
16693 _tmp10_ = _tmp12_;
16694 } else {
16695 _tmp10_ = FALSE(0);
16696 }
16697 if (_tmp10_) {
16698 BalaObjectTypeSymbol* _tmp17_;
16699 _tmp17_ = right_type_as_object_type;
16700 _tmp9_ = _tmp17_ != NULL((void*)0);
16701 } else {
16702 _tmp9_ = FALSE(0);
16703 }
16704 if (_tmp9_) {
16705 gboolean _tmp18_ = FALSE(0);
16706 BalaObjectTypeSymbol* _tmp19_;
16707 _tmp19_ = right_type_as_object_type;
16708 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp19_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
16709 _tmp18_ = TRUE(!(0));
16710 } else {
16711 BalaObjectTypeSymbol* _tmp20_;
16712 gboolean _tmp21_;
16713 gboolean _tmp22_;
16714 _tmp20_ = right_type_as_object_type;
16715 _tmp21_ = bala_class_get_is_compact (G_TYPE_CHECK_INSTANCE_CAST (_tmp20_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp20_), ((bala_class_get_type ())))))
);
16716 _tmp22_ = _tmp21_;
16717 _tmp18_ = !_tmp22_;
16718 }
16719 _tmp8_ = _tmp18_;
16720 } else {
16721 _tmp8_ = FALSE(0);
16722 }
16723 if (_tmp8_) {
16724 BalaObjectTypeSymbol* _tmp23_;
16725 BalaObjectTypeSymbol* _tmp24_;
16726 _tmp23_ = left_type_as_object_type;
16727 _tmp24_ = right_type_as_object_type;
16728 if (_tmp23_ != _tmp24_) {
16729 BalaObjectTypeSymbol* _tmp25_;
16730 BalaObjectTypeSymbol* _tmp26_;
16731 _tmp25_ = left_type_as_object_type;
16732 _tmp26_ = right_type_as_object_type;
16733 if (bala_typesymbol_is_subtype_of ((BalaTypeSymbol*) _tmp25_, (BalaTypeSymbol*) _tmp26_)) {
16734 BalaObjectTypeSymbol* _tmp27_;
16735 BalaCCodeFunctionCall* _tmp28_;
16736 _tmp27_ = right_type_as_object_type;
16737 _tmp28_ = bala_ccode_base_module_generate_instance_cast (self, *cleft, (BalaTypeSymbol*) _tmp27_);
16738 _bala_ccode_node_unref0 (*cleft)((*cleft == ((void*)0)) ? ((void*)0) : (*cleft = (bala_ccode_node_unref
(*cleft), ((void*)0))))
;
16739 *cleft = (BalaCCodeExpression*) _tmp28_;
16740 } else {
16741 BalaObjectTypeSymbol* _tmp29_;
16742 BalaObjectTypeSymbol* _tmp30_;
16743 _tmp29_ = right_type_as_object_type;
16744 _tmp30_ = left_type_as_object_type;
16745 if (bala_typesymbol_is_subtype_of ((BalaTypeSymbol*) _tmp29_, (BalaTypeSymbol*) _tmp30_)) {
16746 BalaObjectTypeSymbol* _tmp31_;
16747 BalaCCodeFunctionCall* _tmp32_;
16748 _tmp31_ = left_type_as_object_type;
16749 _tmp32_ = bala_ccode_base_module_generate_instance_cast (self, *cright, (BalaTypeSymbol*) _tmp31_);
16750 _bala_ccode_node_unref0 (*cright)((*cright == ((void*)0)) ? ((void*)0) : (*cright = (bala_ccode_node_unref
(*cright), ((void*)0))))
;
16751 *cright = (BalaCCodeExpression*) _tmp32_;
16752 }
16753 }
16754 }
16755 } else {
16756 gboolean _tmp33_ = FALSE(0);
16757 BalaStruct* _tmp34_;
16758 _tmp34_ = left_type_as_struct;
16759 if (_tmp34_ != NULL((void*)0)) {
16760 BalaStruct* _tmp35_;
16761 _tmp35_ = right_type_as_struct;
16762 _tmp33_ = _tmp35_ != NULL((void*)0);
16763 } else {
16764 _tmp33_ = FALSE(0);
16765 }
16766 if (_tmp33_) {
16767 if (G_TYPE_CHECK_INSTANCE_TYPE (*left_type, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
*left_type); GType __t = ((bala_struct_value_type_get_type ()
)); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
16768 gboolean _tmp36_;
16769 gboolean _tmp37_;
16770 gboolean _tmp39_;
16771 gboolean _tmp40_;
16772 _tmp36_ = bala_data_type_get_nullable (*left_type);
16773 _tmp37_ = _tmp36_;
16774 if (!_tmp37_) {
16775 BalaCCodeUnaryExpression* _tmp38_;
16776 _tmp38_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, *cleft);
16777 _bala_ccode_node_unref0 (*cleft)((*cleft == ((void*)0)) ? ((void*)0) : (*cleft = (bala_ccode_node_unref
(*cleft), ((void*)0))))
;
16778 *cleft = (BalaCCodeExpression*) _tmp38_;
16779 }
16780 _tmp39_ = bala_data_type_get_nullable (*right_type);
16781 _tmp40_ = _tmp39_;
16782 if (!_tmp40_) {
16783 BalaCCodeUnaryExpression* _tmp41_;
16784 _tmp41_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, *cright);
16785 _bala_ccode_node_unref0 (*cright)((*cright == ((void*)0)) ? ((void*)0) : (*cright = (bala_ccode_node_unref
(*cright), ((void*)0))))
;
16786 *cright = (BalaCCodeExpression*) _tmp41_;
16787 }
16788 } else {
16789 gboolean _tmp42_ = FALSE(0);
16790 gboolean _tmp43_;
16791 gboolean _tmp44_;
16792 _tmp43_ = bala_data_type_get_nullable (*left_type);
16793 _tmp44_ = _tmp43_;
16794 if (_tmp44_) {
16795 gboolean _tmp45_;
16796 gboolean _tmp46_;
16797 _tmp45_ = bala_data_type_get_nullable (*right_type);
16798 _tmp46_ = _tmp45_;
16799 _tmp42_ = _tmp46_;
16800 } else {
16801 _tmp42_ = FALSE(0);
16802 }
16803 if (_tmp42_) {
16804 } else {
16805 gboolean _tmp47_;
16806 gboolean _tmp48_;
16807 _tmp47_ = bala_data_type_get_nullable (*left_type);
16808 _tmp48_ = _tmp47_;
16809 if (_tmp48_) {
16810 BalaCCodeUnaryExpression* _tmp49_;
16811 _tmp49_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, *cleft);
16812 _bala_ccode_node_unref0 (*cleft)((*cleft == ((void*)0)) ? ((void*)0) : (*cleft = (bala_ccode_node_unref
(*cleft), ((void*)0))))
;
16813 *cleft = (BalaCCodeExpression*) _tmp49_;
16814 } else {
16815 gboolean _tmp50_;
16816 gboolean _tmp51_;
16817 _tmp50_ = bala_data_type_get_nullable (*right_type);
16818 _tmp51_ = _tmp50_;
16819 if (_tmp51_) {
16820 BalaCCodeUnaryExpression* _tmp52_;
16821 _tmp52_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, *cright);
16822 _bala_ccode_node_unref0 (*cright)((*cright == ((void*)0)) ? ((void*)0) : (*cright = (bala_ccode_node_unref
(*cright), ((void*)0))))
;
16823 *cright = (BalaCCodeExpression*) _tmp52_;
16824 }
16825 }
16826 }
16827 }
16828 }
16829 }
16830}
16831
16832static gchar*
16833bala_ccode_base_module_generate_struct_equal_function (BalaCCodeBaseModule* self,
16834 BalaStruct* st)
16835{
16836 BalaStruct* _tmp0_;
16837 BalaStruct* _tmp1_;
16838 gchar* equal_func = NULL((void*)0);
16839 gchar* _tmp5_;
16840 gchar* _tmp6_;
16841 gchar* _tmp7_;
16842 gchar* _tmp8_;
16843 const gchar* _tmp9_;
16844 BalaCCodeFunction* function = NULL((void*)0);
16845 const gchar* _tmp10_;
16846 BalaDataType* _tmp11_;
16847 gchar* _tmp12_;
16848 gchar* _tmp13_;
16849 BalaCCodeFunction* _tmp14_;
16850 BalaCCodeFunction* _tmp15_;
16851 BalaCCodeFunction* _tmp16_;
16852 BalaCCodeFunction* _tmp17_;
16853 gchar* _tmp18_;
16854 gchar* _tmp19_;
16855 gchar* _tmp20_;
16856 gchar* _tmp21_;
16857 BalaCCodeParameter* _tmp22_;
16858 BalaCCodeParameter* _tmp23_;
16859 BalaCCodeFunction* _tmp24_;
16860 gchar* _tmp25_;
16861 gchar* _tmp26_;
16862 gchar* _tmp27_;
16863 gchar* _tmp28_;
16864 BalaCCodeParameter* _tmp29_;
16865 BalaCCodeParameter* _tmp30_;
16866 BalaCCodeFunction* _tmp31_;
16867 gboolean has_instance_fields = FALSE(0);
16868 BalaCCodeFile* _tmp187_;
16869 BalaCCodeFunction* _tmp188_;
16870 BalaCCodeFile* _tmp189_;
16871 BalaCCodeFunction* _tmp190_;
16872 gchar* result = NULL((void*)0);
16873 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
16874 g_return_val_if_fail (st != NULL, NULL)do { if ((st != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "st != NULL");
return (((void*)0)); } } while (0)
;
16875 _tmp0_ = bala_struct_get_base_struct (st);
16876 _tmp1_ = _tmp0_;
16877 if (_tmp1_ != NULL((void*)0)) {
16878 BalaStruct* _tmp2_;
16879 BalaStruct* _tmp3_;
16880 gchar* _tmp4_;
16881 _tmp2_ = bala_struct_get_base_struct (st);
16882 _tmp3_ = _tmp2_;
16883 _tmp4_ = bala_ccode_base_module_generate_struct_equal_function (self, _tmp3_);
16884 result = _tmp4_;
16885 return result;
16886 }
16887 _tmp5_ = bala_get_ccode_lower_case_prefix ((BalaSymbol*) st);
16888 _tmp6_ = _tmp5_;
16889 _tmp7_ = g_strdup_printf ("_%sequal", _tmp6_);
16890 _tmp8_ = _tmp7_;
16891 _g_free0 (_tmp6_)(_tmp6_ = (g_free (_tmp6_), ((void*)0)));
16892 equal_func = _tmp8_;
16893 _tmp9_ = equal_func;
16894 if (!bala_ccode_base_module_add_wrapper (self, _tmp9_)) {
16895 result = equal_func;
16896 return result;
16897 }
16898 _tmp10_ = equal_func;
16899 _tmp11_ = self->bool_type;
16900 _tmp12_ = bala_get_ccode_name ((BalaCodeNode*) _tmp11_);
16901 _tmp13_ = _tmp12_;
16902 _tmp14_ = bala_ccode_function_new (_tmp10_, _tmp13_);
16903 _tmp15_ = _tmp14_;
16904 _g_free0 (_tmp13_)(_tmp13_ = (g_free (_tmp13_), ((void*)0)));
16905 function = _tmp15_;
16906 _tmp16_ = function;
16907 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp16_, BALA_CCODE_MODIFIERS_STATIC);
16908 _tmp17_ = function;
16909 _tmp18_ = bala_get_ccode_name ((BalaCodeNode*) st);
16910 _tmp19_ = _tmp18_;
16911 _tmp20_ = g_strdup_printf ("const %s *", _tmp19_);
16912 _tmp21_ = _tmp20_;
16913 _tmp22_ = bala_ccode_parameter_new ("s1", _tmp21_);
16914 _tmp23_ = _tmp22_;
16915 bala_ccode_function_add_parameter (_tmp17_, _tmp23_);
16916 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
16917 _g_free0 (_tmp21_)(_tmp21_ = (g_free (_tmp21_), ((void*)0)));
16918 _g_free0 (_tmp19_)(_tmp19_ = (g_free (_tmp19_), ((void*)0)));
16919 _tmp24_ = function;
16920 _tmp25_ = bala_get_ccode_name ((BalaCodeNode*) st);
16921 _tmp26_ = _tmp25_;
16922 _tmp27_ = g_strdup_printf ("const %s *", _tmp26_);
16923 _tmp28_ = _tmp27_;
16924 _tmp29_ = bala_ccode_parameter_new ("s2", _tmp28_);
16925 _tmp30_ = _tmp29_;
16926 bala_ccode_function_add_parameter (_tmp24_, _tmp30_);
16927 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
16928 _g_free0 (_tmp28_)(_tmp28_ = (g_free (_tmp28_), ((void*)0)));
16929 _g_free0 (_tmp26_)(_tmp26_ = (g_free (_tmp26_), ((void*)0)));
16930 _tmp31_ = function;
16931 bala_ccode_base_module_push_function (self, _tmp31_);
16932 {
16933 BalaCCodeBinaryExpression* cexp = NULL((void*)0);
16934 BalaCCodeIdentifier* _tmp32_;
16935 BalaCCodeIdentifier* _tmp33_;
16936 BalaCCodeIdentifier* _tmp34_;
16937 BalaCCodeIdentifier* _tmp35_;
16938 BalaCCodeBinaryExpression* _tmp36_;
16939 BalaCCodeBinaryExpression* _tmp37_;
16940 BalaCCodeFunction* _tmp38_;
16941 BalaCCodeFunction* _tmp39_;
16942 BalaCCodeBinaryExpression* _tmp40_;
16943 BalaCCodeFunction* _tmp41_;
16944 BalaCCodeFunction* _tmp42_;
16945 BalaCCodeExpression* _tmp43_;
16946 BalaCCodeExpression* _tmp44_;
16947 BalaCCodeFunction* _tmp45_;
16948 BalaCCodeFunction* _tmp46_;
16949 _tmp32_ = bala_ccode_identifier_new ("s1");
16950 _tmp33_ = _tmp32_;
16951 _tmp34_ = bala_ccode_identifier_new ("s2");
16952 _tmp35_ = _tmp34_;
16953 _tmp36_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp33_, (BalaCCodeExpression*) _tmp35_);
16954 _tmp37_ = _tmp36_;
16955 _bala_ccode_node_unref0 (_tmp35_)((_tmp35_ == ((void*)0)) ? ((void*)0) : (_tmp35_ = (bala_ccode_node_unref
(_tmp35_), ((void*)0))))
;
16956 _bala_ccode_node_unref0 (_tmp33_)((_tmp33_ == ((void*)0)) ? ((void*)0) : (_tmp33_ = (bala_ccode_node_unref
(_tmp33_), ((void*)0))))
;
16957 cexp = _tmp37_;
16958 _tmp38_ = bala_ccode_base_module_get_ccode (self);
16959 _tmp39_ = _tmp38_;
16960 _tmp40_ = cexp;
16961 bala_ccode_function_open_if (_tmp39_, (BalaCCodeExpression*) _tmp40_);
16962 _tmp41_ = bala_ccode_base_module_get_ccode (self);
16963 _tmp42_ = _tmp41_;
16964 _tmp43_ = bala_ccode_base_module_get_boolean_cconstant (self, TRUE(!(0)));
16965 _tmp44_ = _tmp43_;
16966 bala_ccode_function_add_return (_tmp42_, _tmp44_);
16967 _bala_ccode_node_unref0 (_tmp44_)((_tmp44_ == ((void*)0)) ? ((void*)0) : (_tmp44_ = (bala_ccode_node_unref
(_tmp44_), ((void*)0))))
;
16968 _tmp45_ = bala_ccode_base_module_get_ccode (self);
16969 _tmp46_ = _tmp45_;
16970 bala_ccode_function_close (_tmp46_);
16971 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
16972 }
16973 {
16974 BalaCCodeBinaryExpression* cexp = NULL((void*)0);
16975 BalaCCodeIdentifier* _tmp47_;
16976 BalaCCodeIdentifier* _tmp48_;
16977 BalaCCodeConstant* _tmp49_;
16978 BalaCCodeConstant* _tmp50_;
16979 BalaCCodeBinaryExpression* _tmp51_;
16980 BalaCCodeBinaryExpression* _tmp52_;
16981 BalaCCodeFunction* _tmp53_;
16982 BalaCCodeFunction* _tmp54_;
16983 BalaCCodeBinaryExpression* _tmp55_;
16984 BalaCCodeFunction* _tmp56_;
16985 BalaCCodeFunction* _tmp57_;
16986 BalaCCodeExpression* _tmp58_;
16987 BalaCCodeExpression* _tmp59_;
16988 BalaCCodeFunction* _tmp60_;
16989 BalaCCodeFunction* _tmp61_;
16990 BalaCCodeIdentifier* _tmp62_;
16991 BalaCCodeIdentifier* _tmp63_;
16992 BalaCCodeConstant* _tmp64_;
16993 BalaCCodeConstant* _tmp65_;
16994 BalaCCodeBinaryExpression* _tmp66_;
16995 BalaCCodeFunction* _tmp67_;
16996 BalaCCodeFunction* _tmp68_;
16997 BalaCCodeBinaryExpression* _tmp69_;
16998 BalaCCodeFunction* _tmp70_;
16999 BalaCCodeFunction* _tmp71_;
17000 BalaCCodeExpression* _tmp72_;
17001 BalaCCodeExpression* _tmp73_;
17002 BalaCCodeFunction* _tmp74_;
17003 BalaCCodeFunction* _tmp75_;
17004 _tmp47_ = bala_ccode_identifier_new ("s1");
17005 _tmp48_ = _tmp47_;
17006 _tmp49_ = bala_ccode_constant_new ("NULL");
17007 _tmp50_ = _tmp49_;
17008 _tmp51_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp48_, (BalaCCodeExpression*) _tmp50_);
17009 _tmp52_ = _tmp51_;
17010 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
17011 _bala_ccode_node_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_ccode_node_unref
(_tmp48_), ((void*)0))))
;
17012 cexp = _tmp52_;
17013 _tmp53_ = bala_ccode_base_module_get_ccode (self);
17014 _tmp54_ = _tmp53_;
17015 _tmp55_ = cexp;
17016 bala_ccode_function_open_if (_tmp54_, (BalaCCodeExpression*) _tmp55_);
17017 _tmp56_ = bala_ccode_base_module_get_ccode (self);
17018 _tmp57_ = _tmp56_;
17019 _tmp58_ = bala_ccode_base_module_get_boolean_cconstant (self, FALSE(0));
17020 _tmp59_ = _tmp58_;
17021 bala_ccode_function_add_return (_tmp57_, _tmp59_);
17022 _bala_ccode_node_unref0 (_tmp59_)((_tmp59_ == ((void*)0)) ? ((void*)0) : (_tmp59_ = (bala_ccode_node_unref
(_tmp59_), ((void*)0))))
;
17023 _tmp60_ = bala_ccode_base_module_get_ccode (self);
17024 _tmp61_ = _tmp60_;
17025 bala_ccode_function_close (_tmp61_);
17026 _tmp62_ = bala_ccode_identifier_new ("s2");
17027 _tmp63_ = _tmp62_;
17028 _tmp64_ = bala_ccode_constant_new ("NULL");
17029 _tmp65_ = _tmp64_;
17030 _tmp66_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp63_, (BalaCCodeExpression*) _tmp65_);
17031 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17032 cexp = _tmp66_;
17033 _bala_ccode_node_unref0 (_tmp65_)((_tmp65_ == ((void*)0)) ? ((void*)0) : (_tmp65_ = (bala_ccode_node_unref
(_tmp65_), ((void*)0))))
;
17034 _bala_ccode_node_unref0 (_tmp63_)((_tmp63_ == ((void*)0)) ? ((void*)0) : (_tmp63_ = (bala_ccode_node_unref
(_tmp63_), ((void*)0))))
;
17035 _tmp67_ = bala_ccode_base_module_get_ccode (self);
17036 _tmp68_ = _tmp67_;
17037 _tmp69_ = cexp;
17038 bala_ccode_function_open_if (_tmp68_, (BalaCCodeExpression*) _tmp69_);
17039 _tmp70_ = bala_ccode_base_module_get_ccode (self);
17040 _tmp71_ = _tmp70_;
17041 _tmp72_ = bala_ccode_base_module_get_boolean_cconstant (self, FALSE(0));
17042 _tmp73_ = _tmp72_;
17043 bala_ccode_function_add_return (_tmp71_, _tmp73_);
17044 _bala_ccode_node_unref0 (_tmp73_)((_tmp73_ == ((void*)0)) ? ((void*)0) : (_tmp73_ = (bala_ccode_node_unref
(_tmp73_), ((void*)0))))
;
17045 _tmp74_ = bala_ccode_base_module_get_ccode (self);
17046 _tmp75_ = _tmp74_;
17047 bala_ccode_function_close (_tmp75_);
17048 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17049 }
17050 has_instance_fields = FALSE(0);
17051 {
17052 BalaList* _f_list = NULL((void*)0);
17053 BalaList* _tmp76_;
17054 BalaList* _tmp77_;
17055 gint _f_size = 0;
17056 BalaList* _tmp78_;
17057 gint _tmp79_;
17058 gint _tmp80_;
17059 gint _f_index = 0;
17060 _tmp76_ = bala_struct_get_fields (st);
17061 _tmp77_ = _bala_iterable_ref0 (_tmp76_);
17062 _f_list = _tmp77_;
17063 _tmp78_ = _f_list;
17064 _tmp79_ = bala_collection_get_size ((BalaCollection*) _tmp78_);
17065 _tmp80_ = _tmp79_;
17066 _f_size = _tmp80_;
17067 _f_index = -1;
17068 while (TRUE(!(0))) {
17069 gint _tmp81_;
17070 gint _tmp82_;
17071 BalaField* f = NULL((void*)0);
17072 BalaList* _tmp83_;
17073 gpointer _tmp84_;
17074 BalaField* _tmp85_;
17075 BalaMemberBinding _tmp86_;
17076 BalaMemberBinding _tmp87_;
17077 BalaCCodeExpression* cexp = NULL((void*)0);
17078 BalaCCodeExpression* s1 = NULL((void*)0);
17079 BalaCCodeIdentifier* _tmp88_;
17080 BalaCCodeIdentifier* _tmp89_;
17081 BalaField* _tmp90_;
17082 gchar* _tmp91_;
17083 gchar* _tmp92_;
17084 BalaCCodeMemberAccess* _tmp93_;
17085 BalaCCodeExpression* _tmp94_;
17086 BalaCCodeExpression* s2 = NULL((void*)0);
17087 BalaCCodeIdentifier* _tmp95_;
17088 BalaCCodeIdentifier* _tmp96_;
17089 BalaField* _tmp97_;
17090 gchar* _tmp98_;
17091 gchar* _tmp99_;
17092 BalaCCodeMemberAccess* _tmp100_;
17093 BalaCCodeExpression* _tmp101_;
17094 BalaDataType* variable_type = NULL((void*)0);
17095 BalaField* _tmp102_;
17096 BalaDataType* _tmp103_;
17097 BalaDataType* _tmp104_;
17098 BalaDataType* _tmp105_;
17099 gboolean _tmp106_ = FALSE(0);
17100 BalaField* _tmp107_;
17101 BalaDataType* _tmp108_;
17102 BalaDataType* _tmp109_;
17103 BalaCCodeFunction* _tmp157_;
17104 BalaCCodeFunction* _tmp158_;
17105 BalaCCodeExpression* _tmp159_;
17106 BalaCCodeFunction* _tmp160_;
17107 BalaCCodeFunction* _tmp161_;
17108 BalaCCodeExpression* _tmp162_;
17109 BalaCCodeExpression* _tmp163_;
17110 BalaCCodeFunction* _tmp164_;
17111 BalaCCodeFunction* _tmp165_;
17112 _f_index = _f_index + 1;
17113 _tmp81_ = _f_index;
17114 _tmp82_ = _f_size;
17115 if (!(_tmp81_ < _tmp82_)) {
17116 break;
17117 }
17118 _tmp83_ = _f_list;
17119 _tmp84_ = bala_list_get (_tmp83_, _f_index);
17120 f = (BalaField*) _tmp84_;
17121 _tmp85_ = f;
17122 _tmp86_ = bala_field_get_binding (_tmp85_);
17123 _tmp87_ = _tmp86_;
17124 if (_tmp87_ != BALA_MEMBER_BINDING_INSTANCE) {
17125 _bala_code_node_unref0 (f)((f == ((void*)0)) ? ((void*)0) : (f = (bala_code_node_unref (
f), ((void*)0))))
;
17126 continue;
17127 }
17128 has_instance_fields = TRUE(!(0));
17129 _tmp88_ = bala_ccode_identifier_new ("s1");
17130 _tmp89_ = _tmp88_;
17131 _tmp90_ = f;
17132 _tmp91_ = bala_get_ccode_name ((BalaCodeNode*) _tmp90_);
17133 _tmp92_ = _tmp91_;
17134 _tmp93_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp89_, _tmp92_);
17135 _tmp94_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp93_, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp93_), ((bala_ccode_expression_get_type ())))))
;
17136 _g_free0 (_tmp92_)(_tmp92_ = (g_free (_tmp92_), ((void*)0)));
17137 _bala_ccode_node_unref0 (_tmp89_)((_tmp89_ == ((void*)0)) ? ((void*)0) : (_tmp89_ = (bala_ccode_node_unref
(_tmp89_), ((void*)0))))
;
17138 s1 = _tmp94_;
17139 _tmp95_ = bala_ccode_identifier_new ("s2");
17140 _tmp96_ = _tmp95_;
17141 _tmp97_ = f;
17142 _tmp98_ = bala_get_ccode_name ((BalaCodeNode*) _tmp97_);
17143 _tmp99_ = _tmp98_;
17144 _tmp100_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp96_, _tmp99_);
17145 _tmp101_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp100_, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp100_), ((bala_ccode_expression_get_type ())))))
;
17146 _g_free0 (_tmp99_)(_tmp99_ = (g_free (_tmp99_), ((void*)0)));
17147 _bala_ccode_node_unref0 (_tmp96_)((_tmp96_ == ((void*)0)) ? ((void*)0) : (_tmp96_ = (bala_ccode_node_unref
(_tmp96_), ((void*)0))))
;
17148 s2 = _tmp101_;
17149 _tmp102_ = f;
17150 _tmp103_ = bala_variable_get_variable_type ((BalaVariable*) _tmp102_);
17151 _tmp104_ = _tmp103_;
17152 _tmp105_ = bala_data_type_copy (_tmp104_);
17153 variable_type = _tmp105_;
17154 bala_ccode_base_module_make_comparable_cexpression (self, &variable_type, &s1, &variable_type, &s2);
17155 _tmp107_ = f;
17156 _tmp108_ = bala_variable_get_variable_type ((BalaVariable*) _tmp107_);
17157 _tmp109_ = _tmp108_;
17158 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp109_, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp109_); GType __t = ((bala_null_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
17159 BalaField* _tmp110_;
17160 BalaDataType* _tmp111_;
17161 BalaDataType* _tmp112_;
17162 BalaDataType* _tmp113_;
17163 _tmp110_ = f;
17164 _tmp111_ = bala_variable_get_variable_type ((BalaVariable*) _tmp110_);
17165 _tmp112_ = _tmp111_;
17166 _tmp113_ = self->string_type;
17167 _tmp106_ = bala_data_type_compatible (_tmp112_, _tmp113_);
17168 } else {
17169 _tmp106_ = FALSE(0);
17170 }
17171 if (_tmp106_) {
17172 BalaCCodeFunctionCall* ccall = NULL((void*)0);
17173 BalaCodeContext* _tmp114_;
17174 BalaProfile _tmp115_;
17175 BalaProfile _tmp116_;
17176 BalaCCodeFunctionCall* _tmp128_;
17177 BalaCCodeExpression* _tmp129_;
17178 BalaCCodeFunctionCall* _tmp130_;
17179 BalaCCodeExpression* _tmp131_;
17180 BalaCCodeFunctionCall* _tmp132_;
17181 BalaCCodeExpression* _tmp133_;
17182 _tmp114_ = self->priv->_context;
17183 _tmp115_ = bala_code_context_get_profile (_tmp114_);
17184 _tmp116_ = _tmp115_;
17185 if (_tmp116_ == BALA_PROFILE_POSIX) {
17186 BalaCCodeFile* _tmp117_;
17187 BalaCCodeIdentifier* _tmp118_;
17188 BalaCCodeIdentifier* _tmp119_;
17189 gchar* _tmp120_;
17190 gchar* _tmp121_;
17191 BalaCCodeIdentifier* _tmp122_;
17192 BalaCCodeIdentifier* _tmp123_;
17193 BalaCCodeFunctionCall* _tmp124_;
17194 _tmp117_ = self->cfile;
17195 bala_ccode_file_add_include (_tmp117_, "string.h", FALSE(0));
17196 _tmp118_ = bala_ccode_identifier_new ("strcmp");
17197 _tmp119_ = _tmp118_;
17198 _tmp120_ = bala_ccode_base_module_generate_cmp_wrapper (self, _tmp119_);
17199 _tmp121_ = _tmp120_;
17200 _tmp122_ = bala_ccode_identifier_new (_tmp121_);
17201 _tmp123_ = _tmp122_;
17202 _tmp124_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp123_);
17203 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
17204 ccall = _tmp124_;
17205 _bala_ccode_node_unref0 (_tmp123_)((_tmp123_ == ((void*)0)) ? ((void*)0) : (_tmp123_ = (bala_ccode_node_unref
(_tmp123_), ((void*)0))))
;
17206 _g_free0 (_tmp121_)(_tmp121_ = (g_free (_tmp121_), ((void*)0)));
17207 _bala_ccode_node_unref0 (_tmp119_)((_tmp119_ == ((void*)0)) ? ((void*)0) : (_tmp119_ = (bala_ccode_node_unref
(_tmp119_), ((void*)0))))
;
17208 } else {
17209 BalaCCodeIdentifier* _tmp125_;
17210 BalaCCodeIdentifier* _tmp126_;
17211 BalaCCodeFunctionCall* _tmp127_;
17212 _tmp125_ = bala_ccode_identifier_new ("g_strcmp0");
17213 _tmp126_ = _tmp125_;
17214 _tmp127_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp126_);
17215 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
17216 ccall = _tmp127_;
17217 _bala_ccode_node_unref0 (_tmp126_)((_tmp126_ == ((void*)0)) ? ((void*)0) : (_tmp126_ = (bala_ccode_node_unref
(_tmp126_), ((void*)0))))
;
17218 }
17219 _tmp128_ = ccall;
17220 _tmp129_ = s1;
17221 bala_ccode_function_call_add_argument (_tmp128_, _tmp129_);
17222 _tmp130_ = ccall;
17223 _tmp131_ = s2;
17224 bala_ccode_function_call_add_argument (_tmp130_, _tmp131_);
17225 _tmp132_ = ccall;
17226 _tmp133_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp132_);
17227 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17228 cexp = _tmp133_;
17229 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
17230 } else {
17231 BalaField* _tmp134_;
17232 BalaDataType* _tmp135_;
17233 BalaDataType* _tmp136_;
17234 _tmp134_ = f;
17235 _tmp135_ = bala_variable_get_variable_type ((BalaVariable*) _tmp134_);
17236 _tmp136_ = _tmp135_;
17237 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp136_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp136_); GType __t = ((bala_struct_value_type_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
17238 gchar* equalfunc = NULL((void*)0);
17239 BalaField* _tmp137_;
17240 BalaDataType* _tmp138_;
17241 BalaDataType* _tmp139_;
17242 BalaTypeSymbol* _tmp140_;
17243 BalaTypeSymbol* _tmp141_;
17244 gchar* _tmp142_;
17245 BalaCCodeFunctionCall* ccall = NULL((void*)0);
17246 const gchar* _tmp143_;
17247 BalaCCodeIdentifier* _tmp144_;
17248 BalaCCodeIdentifier* _tmp145_;
17249 BalaCCodeFunctionCall* _tmp146_;
17250 BalaCCodeFunctionCall* _tmp147_;
17251 BalaCCodeFunctionCall* _tmp148_;
17252 BalaCCodeExpression* _tmp149_;
17253 BalaCCodeFunctionCall* _tmp150_;
17254 BalaCCodeExpression* _tmp151_;
17255 BalaCCodeFunctionCall* _tmp152_;
17256 BalaCCodeUnaryExpression* _tmp153_;
17257 _tmp137_ = f;
17258 _tmp138_ = bala_variable_get_variable_type ((BalaVariable*) _tmp137_);
17259 _tmp139_ = _tmp138_;
17260 _tmp140_ = bala_data_type_get_type_symbol (_tmp139_);
17261 _tmp141_ = _tmp140_;
17262 _tmp142_ = bala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_TYPE (_tmp141_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp141_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp141_) : NULL((void*)0));
17263 equalfunc = _tmp142_;
17264 _tmp143_ = equalfunc;
17265 _tmp144_ = bala_ccode_identifier_new (_tmp143_);
17266 _tmp145_ = _tmp144_;
17267 _tmp146_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp145_);
17268 _tmp147_ = _tmp146_;
17269 _bala_ccode_node_unref0 (_tmp145_)((_tmp145_ == ((void*)0)) ? ((void*)0) : (_tmp145_ = (bala_ccode_node_unref
(_tmp145_), ((void*)0))))
;
17270 ccall = _tmp147_;
17271 _tmp148_ = ccall;
17272 _tmp149_ = s1;
17273 bala_ccode_function_call_add_argument (_tmp148_, _tmp149_);
17274 _tmp150_ = ccall;
17275 _tmp151_ = s2;
17276 bala_ccode_function_call_add_argument (_tmp150_, _tmp151_);
17277 _tmp152_ = ccall;
17278 _tmp153_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (BalaCCodeExpression*) _tmp152_);
17279 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17280 cexp = (BalaCCodeExpression*) _tmp153_;
17281 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
17282 _g_free0 (equalfunc)(equalfunc = (g_free (equalfunc), ((void*)0)));
17283 } else {
17284 BalaCCodeExpression* _tmp154_;
17285 BalaCCodeExpression* _tmp155_;
17286 BalaCCodeBinaryExpression* _tmp156_;
17287 _tmp154_ = s1;
17288 _tmp155_ = s2;
17289 _tmp156_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp154_, _tmp155_);
17290 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17291 cexp = (BalaCCodeExpression*) _tmp156_;
17292 }
17293 }
17294 _tmp157_ = bala_ccode_base_module_get_ccode (self);
17295 _tmp158_ = _tmp157_;
17296 _tmp159_ = cexp;
17297 bala_ccode_function_open_if (_tmp158_, _tmp159_);
17298 _tmp160_ = bala_ccode_base_module_get_ccode (self);
17299 _tmp161_ = _tmp160_;
17300 _tmp162_ = bala_ccode_base_module_get_boolean_cconstant (self, FALSE(0));
17301 _tmp163_ = _tmp162_;
17302 bala_ccode_function_add_return (_tmp161_, _tmp163_);
17303 _bala_ccode_node_unref0 (_tmp163_)((_tmp163_ == ((void*)0)) ? ((void*)0) : (_tmp163_ = (bala_ccode_node_unref
(_tmp163_), ((void*)0))))
;
17304 _tmp164_ = bala_ccode_base_module_get_ccode (self);
17305 _tmp165_ = _tmp164_;
17306 bala_ccode_function_close (_tmp165_);
17307 _bala_code_node_unref0 (variable_type)((variable_type == ((void*)0)) ? ((void*)0) : (variable_type =
(bala_code_node_unref (variable_type), ((void*)0))))
;
17308 _bala_ccode_node_unref0 (s2)((s2 == ((void*)0)) ? ((void*)0) : (s2 = (bala_ccode_node_unref
(s2), ((void*)0))))
;
17309 _bala_ccode_node_unref0 (s1)((s1 == ((void*)0)) ? ((void*)0) : (s1 = (bala_ccode_node_unref
(s1), ((void*)0))))
;
17310 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17311 _bala_code_node_unref0 (f)((f == ((void*)0)) ? ((void*)0) : (f = (bala_code_node_unref (
f), ((void*)0))))
;
17312 }
17313 _bala_iterable_unref0 (_f_list)((_f_list == ((void*)0)) ? ((void*)0) : (_f_list = (bala_iterable_unref
(_f_list), ((void*)0))))
;
17314 }
17315 if (!has_instance_fields) {
17316 if (bala_struct_is_simple_type (st)) {
17317 BalaCCodeBinaryExpression* cexp = NULL((void*)0);
17318 BalaCCodeIdentifier* _tmp166_;
17319 BalaCCodeIdentifier* _tmp167_;
17320 BalaCCodeUnaryExpression* _tmp168_;
17321 BalaCCodeUnaryExpression* _tmp169_;
17322 BalaCCodeIdentifier* _tmp170_;
17323 BalaCCodeIdentifier* _tmp171_;
17324 BalaCCodeUnaryExpression* _tmp172_;
17325 BalaCCodeUnaryExpression* _tmp173_;
17326 BalaCCodeBinaryExpression* _tmp174_;
17327 BalaCCodeBinaryExpression* _tmp175_;
17328 BalaCCodeFunction* _tmp176_;
17329 BalaCCodeFunction* _tmp177_;
17330 BalaCCodeBinaryExpression* _tmp178_;
17331 _tmp166_ = bala_ccode_identifier_new ("s1");
17332 _tmp167_ = _tmp166_;
17333 _tmp168_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (BalaCCodeExpression*) _tmp167_);
17334 _tmp169_ = _tmp168_;
17335 _tmp170_ = bala_ccode_identifier_new ("s2");
17336 _tmp171_ = _tmp170_;
17337 _tmp172_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (BalaCCodeExpression*) _tmp171_);
17338 _tmp173_ = _tmp172_;
17339 _tmp174_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp169_, (BalaCCodeExpression*) _tmp173_);
17340 _tmp175_ = _tmp174_;
17341 _bala_ccode_node_unref0 (_tmp173_)((_tmp173_ == ((void*)0)) ? ((void*)0) : (_tmp173_ = (bala_ccode_node_unref
(_tmp173_), ((void*)0))))
;
17342 _bala_ccode_node_unref0 (_tmp171_)((_tmp171_ == ((void*)0)) ? ((void*)0) : (_tmp171_ = (bala_ccode_node_unref
(_tmp171_), ((void*)0))))
;
17343 _bala_ccode_node_unref0 (_tmp169_)((_tmp169_ == ((void*)0)) ? ((void*)0) : (_tmp169_ = (bala_ccode_node_unref
(_tmp169_), ((void*)0))))
;
17344 _bala_ccode_node_unref0 (_tmp167_)((_tmp167_ == ((void*)0)) ? ((void*)0) : (_tmp167_ = (bala_ccode_node_unref
(_tmp167_), ((void*)0))))
;
17345 cexp = _tmp175_;
17346 _tmp176_ = bala_ccode_base_module_get_ccode (self);
17347 _tmp177_ = _tmp176_;
17348 _tmp178_ = cexp;
17349 bala_ccode_function_add_return (_tmp177_, (BalaCCodeExpression*) _tmp178_);
17350 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17351 } else {
17352 BalaCCodeFunction* _tmp179_;
17353 BalaCCodeFunction* _tmp180_;
17354 BalaCCodeExpression* _tmp181_;
17355 BalaCCodeExpression* _tmp182_;
17356 _tmp179_ = bala_ccode_base_module_get_ccode (self);
17357 _tmp180_ = _tmp179_;
17358 _tmp181_ = bala_ccode_base_module_get_boolean_cconstant (self, FALSE(0));
17359 _tmp182_ = _tmp181_;
17360 bala_ccode_function_add_return (_tmp180_, _tmp182_);
17361 _bala_ccode_node_unref0 (_tmp182_)((_tmp182_ == ((void*)0)) ? ((void*)0) : (_tmp182_ = (bala_ccode_node_unref
(_tmp182_), ((void*)0))))
;
17362 }
17363 } else {
17364 BalaCCodeFunction* _tmp183_;
17365 BalaCCodeFunction* _tmp184_;
17366 BalaCCodeExpression* _tmp185_;
17367 BalaCCodeExpression* _tmp186_;
17368 _tmp183_ = bala_ccode_base_module_get_ccode (self);
17369 _tmp184_ = _tmp183_;
17370 _tmp185_ = bala_ccode_base_module_get_boolean_cconstant (self, TRUE(!(0)));
17371 _tmp186_ = _tmp185_;
17372 bala_ccode_function_add_return (_tmp184_, _tmp186_);
17373 _bala_ccode_node_unref0 (_tmp186_)((_tmp186_ == ((void*)0)) ? ((void*)0) : (_tmp186_ = (bala_ccode_node_unref
(_tmp186_), ((void*)0))))
;
17374 }
17375 bala_ccode_base_module_pop_function (self);
17376 _tmp187_ = self->cfile;
17377 _tmp188_ = function;
17378 bala_ccode_file_add_function_declaration (_tmp187_, _tmp188_);
17379 _tmp189_ = self->cfile;
17380 _tmp190_ = function;
17381 bala_ccode_file_add_function (_tmp189_, _tmp190_);
17382 result = equal_func;
17383 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
17384 return result;
17385}
17386
17387static gchar*
17388bala_ccode_base_module_generate_numeric_equal_function (BalaCCodeBaseModule* self,
17389 BalaTypeSymbol* sym)
17390{
17391 gchar* equal_func = NULL((void*)0);
17392 gchar* _tmp0_;
17393 gchar* _tmp1_;
17394 gchar* _tmp2_;
17395 gchar* _tmp3_;
17396 const gchar* _tmp4_;
17397 BalaCCodeFunction* function = NULL((void*)0);
17398 const gchar* _tmp5_;
17399 BalaDataType* _tmp6_;
17400 gchar* _tmp7_;
17401 gchar* _tmp8_;
17402 BalaCCodeFunction* _tmp9_;
17403 BalaCCodeFunction* _tmp10_;
17404 BalaCCodeFunction* _tmp11_;
17405 BalaCCodeFunction* _tmp12_;
17406 gchar* _tmp13_;
17407 gchar* _tmp14_;
17408 gchar* _tmp15_;
17409 gchar* _tmp16_;
17410 BalaCCodeParameter* _tmp17_;
17411 BalaCCodeParameter* _tmp18_;
17412 BalaCCodeFunction* _tmp19_;
17413 gchar* _tmp20_;
17414 gchar* _tmp21_;
17415 gchar* _tmp22_;
17416 gchar* _tmp23_;
17417 BalaCCodeParameter* _tmp24_;
17418 BalaCCodeParameter* _tmp25_;
17419 BalaCCodeFunction* _tmp26_;
17420 BalaCCodeFile* _tmp84_;
17421 BalaCCodeFunction* _tmp85_;
17422 BalaCCodeFile* _tmp86_;
17423 BalaCCodeFunction* _tmp87_;
17424 gchar* result = NULL((void*)0);
17425 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
17426 g_return_val_if_fail (sym != NULL, NULL)do { if ((sym != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "sym != NULL")
; return (((void*)0)); } } while (0)
;
17427 _tmp0_ = bala_get_ccode_lower_case_prefix ((BalaSymbol*) sym);
17428 _tmp1_ = _tmp0_;
17429 _tmp2_ = g_strdup_printf ("_%sequal", _tmp1_);
17430 _tmp3_ = _tmp2_;
17431 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
17432 equal_func = _tmp3_;
17433 _tmp4_ = equal_func;
17434 if (!bala_ccode_base_module_add_wrapper (self, _tmp4_)) {
17435 result = equal_func;
17436 return result;
17437 }
17438 _tmp5_ = equal_func;
17439 _tmp6_ = self->bool_type;
17440 _tmp7_ = bala_get_ccode_name ((BalaCodeNode*) _tmp6_);
17441 _tmp8_ = _tmp7_;
17442 _tmp9_ = bala_ccode_function_new (_tmp5_, _tmp8_);
17443 _tmp10_ = _tmp9_;
17444 _g_free0 (_tmp8_)(_tmp8_ = (g_free (_tmp8_), ((void*)0)));
17445 function = _tmp10_;
17446 _tmp11_ = function;
17447 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp11_, BALA_CCODE_MODIFIERS_STATIC);
17448 _tmp12_ = function;
17449 _tmp13_ = bala_get_ccode_name ((BalaCodeNode*) sym);
17450 _tmp14_ = _tmp13_;
17451 _tmp15_ = g_strdup_printf ("const %s *", _tmp14_);
17452 _tmp16_ = _tmp15_;
17453 _tmp17_ = bala_ccode_parameter_new ("s1", _tmp16_);
17454 _tmp18_ = _tmp17_;
17455 bala_ccode_function_add_parameter (_tmp12_, _tmp18_);
17456 _bala_ccode_node_unref0 (_tmp18_)((_tmp18_ == ((void*)0)) ? ((void*)0) : (_tmp18_ = (bala_ccode_node_unref
(_tmp18_), ((void*)0))))
;
17457 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
17458 _g_free0 (_tmp14_)(_tmp14_ = (g_free (_tmp14_), ((void*)0)));
17459 _tmp19_ = function;
17460 _tmp20_ = bala_get_ccode_name ((BalaCodeNode*) sym);
17461 _tmp21_ = _tmp20_;
17462 _tmp22_ = g_strdup_printf ("const %s *", _tmp21_);
17463 _tmp23_ = _tmp22_;
17464 _tmp24_ = bala_ccode_parameter_new ("s2", _tmp23_);
17465 _tmp25_ = _tmp24_;
17466 bala_ccode_function_add_parameter (_tmp19_, _tmp25_);
17467 _bala_ccode_node_unref0 (_tmp25_)((_tmp25_ == ((void*)0)) ? ((void*)0) : (_tmp25_ = (bala_ccode_node_unref
(_tmp25_), ((void*)0))))
;
17468 _g_free0 (_tmp23_)(_tmp23_ = (g_free (_tmp23_), ((void*)0)));
17469 _g_free0 (_tmp21_)(_tmp21_ = (g_free (_tmp21_), ((void*)0)));
17470 _tmp26_ = function;
17471 bala_ccode_base_module_push_function (self, _tmp26_);
17472 {
17473 BalaCCodeBinaryExpression* cexp = NULL((void*)0);
17474 BalaCCodeIdentifier* _tmp27_;
17475 BalaCCodeIdentifier* _tmp28_;
17476 BalaCCodeIdentifier* _tmp29_;
17477 BalaCCodeIdentifier* _tmp30_;
17478 BalaCCodeBinaryExpression* _tmp31_;
17479 BalaCCodeBinaryExpression* _tmp32_;
17480 BalaCCodeFunction* _tmp33_;
17481 BalaCCodeFunction* _tmp34_;
17482 BalaCCodeBinaryExpression* _tmp35_;
17483 BalaCCodeFunction* _tmp36_;
17484 BalaCCodeFunction* _tmp37_;
17485 BalaCCodeExpression* _tmp38_;
17486 BalaCCodeExpression* _tmp39_;
17487 BalaCCodeFunction* _tmp40_;
17488 BalaCCodeFunction* _tmp41_;
17489 _tmp27_ = bala_ccode_identifier_new ("s1");
17490 _tmp28_ = _tmp27_;
17491 _tmp29_ = bala_ccode_identifier_new ("s2");
17492 _tmp30_ = _tmp29_;
17493 _tmp31_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp28_, (BalaCCodeExpression*) _tmp30_);
17494 _tmp32_ = _tmp31_;
17495 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
17496 _bala_ccode_node_unref0 (_tmp28_)((_tmp28_ == ((void*)0)) ? ((void*)0) : (_tmp28_ = (bala_ccode_node_unref
(_tmp28_), ((void*)0))))
;
17497 cexp = _tmp32_;
17498 _tmp33_ = bala_ccode_base_module_get_ccode (self);
17499 _tmp34_ = _tmp33_;
17500 _tmp35_ = cexp;
17501 bala_ccode_function_open_if (_tmp34_, (BalaCCodeExpression*) _tmp35_);
17502 _tmp36_ = bala_ccode_base_module_get_ccode (self);
17503 _tmp37_ = _tmp36_;
17504 _tmp38_ = bala_ccode_base_module_get_boolean_cconstant (self, TRUE(!(0)));
17505 _tmp39_ = _tmp38_;
17506 bala_ccode_function_add_return (_tmp37_, _tmp39_);
17507 _bala_ccode_node_unref0 (_tmp39_)((_tmp39_ == ((void*)0)) ? ((void*)0) : (_tmp39_ = (bala_ccode_node_unref
(_tmp39_), ((void*)0))))
;
17508 _tmp40_ = bala_ccode_base_module_get_ccode (self);
17509 _tmp41_ = _tmp40_;
17510 bala_ccode_function_close (_tmp41_);
17511 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17512 }
17513 {
17514 BalaCCodeBinaryExpression* cexp = NULL((void*)0);
17515 BalaCCodeIdentifier* _tmp42_;
17516 BalaCCodeIdentifier* _tmp43_;
17517 BalaCCodeConstant* _tmp44_;
17518 BalaCCodeConstant* _tmp45_;
17519 BalaCCodeBinaryExpression* _tmp46_;
17520 BalaCCodeBinaryExpression* _tmp47_;
17521 BalaCCodeFunction* _tmp48_;
17522 BalaCCodeFunction* _tmp49_;
17523 BalaCCodeBinaryExpression* _tmp50_;
17524 BalaCCodeFunction* _tmp51_;
17525 BalaCCodeFunction* _tmp52_;
17526 BalaCCodeExpression* _tmp53_;
17527 BalaCCodeExpression* _tmp54_;
17528 BalaCCodeFunction* _tmp55_;
17529 BalaCCodeFunction* _tmp56_;
17530 BalaCCodeIdentifier* _tmp57_;
17531 BalaCCodeIdentifier* _tmp58_;
17532 BalaCCodeConstant* _tmp59_;
17533 BalaCCodeConstant* _tmp60_;
17534 BalaCCodeBinaryExpression* _tmp61_;
17535 BalaCCodeFunction* _tmp62_;
17536 BalaCCodeFunction* _tmp63_;
17537 BalaCCodeBinaryExpression* _tmp64_;
17538 BalaCCodeFunction* _tmp65_;
17539 BalaCCodeFunction* _tmp66_;
17540 BalaCCodeExpression* _tmp67_;
17541 BalaCCodeExpression* _tmp68_;
17542 BalaCCodeFunction* _tmp69_;
17543 BalaCCodeFunction* _tmp70_;
17544 _tmp42_ = bala_ccode_identifier_new ("s1");
17545 _tmp43_ = _tmp42_;
17546 _tmp44_ = bala_ccode_constant_new ("NULL");
17547 _tmp45_ = _tmp44_;
17548 _tmp46_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp43_, (BalaCCodeExpression*) _tmp45_);
17549 _tmp47_ = _tmp46_;
17550 _bala_ccode_node_unref0 (_tmp45_)((_tmp45_ == ((void*)0)) ? ((void*)0) : (_tmp45_ = (bala_ccode_node_unref
(_tmp45_), ((void*)0))))
;
17551 _bala_ccode_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_ccode_node_unref
(_tmp43_), ((void*)0))))
;
17552 cexp = _tmp47_;
17553 _tmp48_ = bala_ccode_base_module_get_ccode (self);
17554 _tmp49_ = _tmp48_;
17555 _tmp50_ = cexp;
17556 bala_ccode_function_open_if (_tmp49_, (BalaCCodeExpression*) _tmp50_);
17557 _tmp51_ = bala_ccode_base_module_get_ccode (self);
17558 _tmp52_ = _tmp51_;
17559 _tmp53_ = bala_ccode_base_module_get_boolean_cconstant (self, FALSE(0));
17560 _tmp54_ = _tmp53_;
17561 bala_ccode_function_add_return (_tmp52_, _tmp54_);
17562 _bala_ccode_node_unref0 (_tmp54_)((_tmp54_ == ((void*)0)) ? ((void*)0) : (_tmp54_ = (bala_ccode_node_unref
(_tmp54_), ((void*)0))))
;
17563 _tmp55_ = bala_ccode_base_module_get_ccode (self);
17564 _tmp56_ = _tmp55_;
17565 bala_ccode_function_close (_tmp56_);
17566 _tmp57_ = bala_ccode_identifier_new ("s2");
17567 _tmp58_ = _tmp57_;
17568 _tmp59_ = bala_ccode_constant_new ("NULL");
17569 _tmp60_ = _tmp59_;
17570 _tmp61_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp58_, (BalaCCodeExpression*) _tmp60_);
17571 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17572 cexp = _tmp61_;
17573 _bala_ccode_node_unref0 (_tmp60_)((_tmp60_ == ((void*)0)) ? ((void*)0) : (_tmp60_ = (bala_ccode_node_unref
(_tmp60_), ((void*)0))))
;
17574 _bala_ccode_node_unref0 (_tmp58_)((_tmp58_ == ((void*)0)) ? ((void*)0) : (_tmp58_ = (bala_ccode_node_unref
(_tmp58_), ((void*)0))))
;
17575 _tmp62_ = bala_ccode_base_module_get_ccode (self);
17576 _tmp63_ = _tmp62_;
17577 _tmp64_ = cexp;
17578 bala_ccode_function_open_if (_tmp63_, (BalaCCodeExpression*) _tmp64_);
17579 _tmp65_ = bala_ccode_base_module_get_ccode (self);
17580 _tmp66_ = _tmp65_;
17581 _tmp67_ = bala_ccode_base_module_get_boolean_cconstant (self, FALSE(0));
17582 _tmp68_ = _tmp67_;
17583 bala_ccode_function_add_return (_tmp66_, _tmp68_);
17584 _bala_ccode_node_unref0 (_tmp68_)((_tmp68_ == ((void*)0)) ? ((void*)0) : (_tmp68_ = (bala_ccode_node_unref
(_tmp68_), ((void*)0))))
;
17585 _tmp69_ = bala_ccode_base_module_get_ccode (self);
17586 _tmp70_ = _tmp69_;
17587 bala_ccode_function_close (_tmp70_);
17588 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17589 }
17590 {
17591 BalaCCodeBinaryExpression* cexp = NULL((void*)0);
17592 BalaCCodeIdentifier* _tmp71_;
17593 BalaCCodeIdentifier* _tmp72_;
17594 BalaCCodeUnaryExpression* _tmp73_;
17595 BalaCCodeUnaryExpression* _tmp74_;
17596 BalaCCodeIdentifier* _tmp75_;
17597 BalaCCodeIdentifier* _tmp76_;
17598 BalaCCodeUnaryExpression* _tmp77_;
17599 BalaCCodeUnaryExpression* _tmp78_;
17600 BalaCCodeBinaryExpression* _tmp79_;
17601 BalaCCodeBinaryExpression* _tmp80_;
17602 BalaCCodeFunction* _tmp81_;
17603 BalaCCodeFunction* _tmp82_;
17604 BalaCCodeBinaryExpression* _tmp83_;
17605 _tmp71_ = bala_ccode_identifier_new ("s1");
17606 _tmp72_ = _tmp71_;
17607 _tmp73_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (BalaCCodeExpression*) _tmp72_);
17608 _tmp74_ = _tmp73_;
17609 _tmp75_ = bala_ccode_identifier_new ("s2");
17610 _tmp76_ = _tmp75_;
17611 _tmp77_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (BalaCCodeExpression*) _tmp76_);
17612 _tmp78_ = _tmp77_;
17613 _tmp79_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp74_, (BalaCCodeExpression*) _tmp78_);
17614 _tmp80_ = _tmp79_;
17615 _bala_ccode_node_unref0 (_tmp78_)((_tmp78_ == ((void*)0)) ? ((void*)0) : (_tmp78_ = (bala_ccode_node_unref
(_tmp78_), ((void*)0))))
;
17616 _bala_ccode_node_unref0 (_tmp76_)((_tmp76_ == ((void*)0)) ? ((void*)0) : (_tmp76_ = (bala_ccode_node_unref
(_tmp76_), ((void*)0))))
;
17617 _bala_ccode_node_unref0 (_tmp74_)((_tmp74_ == ((void*)0)) ? ((void*)0) : (_tmp74_ = (bala_ccode_node_unref
(_tmp74_), ((void*)0))))
;
17618 _bala_ccode_node_unref0 (_tmp72_)((_tmp72_ == ((void*)0)) ? ((void*)0) : (_tmp72_ = (bala_ccode_node_unref
(_tmp72_), ((void*)0))))
;
17619 cexp = _tmp80_;
17620 _tmp81_ = bala_ccode_base_module_get_ccode (self);
17621 _tmp82_ = _tmp81_;
17622 _tmp83_ = cexp;
17623 bala_ccode_function_add_return (_tmp82_, (BalaCCodeExpression*) _tmp83_);
17624 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
17625 }
17626 bala_ccode_base_module_pop_function (self);
17627 _tmp84_ = self->cfile;
17628 _tmp85_ = function;
17629 bala_ccode_file_add_function_declaration (_tmp84_, _tmp85_);
17630 _tmp86_ = self->cfile;
17631 _tmp87_ = function;
17632 bala_ccode_file_add_function (_tmp86_, _tmp87_);
17633 result = equal_func;
17634 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
17635 return result;
17636}
17637
17638static gchar*
17639bala_ccode_base_module_generate_struct_dup_wrapper (BalaCCodeBaseModule* self,
17640 BalaValueType* value_type)
17641{
17642 gchar* dup_func = NULL((void*)0);
17643 BalaTypeSymbol* _tmp0_;
17644 BalaTypeSymbol* _tmp1_;
17645 gchar* _tmp2_;
17646 gchar* _tmp3_;
17647 gchar* _tmp4_;
17648 gchar* _tmp5_;
17649 const gchar* _tmp6_;
17650 BalaCCodeFunction* function = NULL((void*)0);
17651 const gchar* _tmp7_;
17652 gchar* _tmp8_;
17653 gchar* _tmp9_;
17654 BalaCCodeFunction* _tmp10_;
17655 BalaCCodeFunction* _tmp11_;
17656 BalaCCodeFunction* _tmp12_;
17657 BalaCCodeFunction* _tmp13_;
17658 gchar* _tmp14_;
17659 gchar* _tmp15_;
17660 BalaCCodeParameter* _tmp16_;
17661 BalaCCodeParameter* _tmp17_;
17662 BalaCCodeFunction* _tmp18_;
17663 BalaTypeSymbol* _tmp19_;
17664 BalaTypeSymbol* _tmp20_;
17665 BalaStruct* _tmp21_;
17666 BalaCCodeFile* _tmp138_;
17667 BalaCCodeFunction* _tmp139_;
17668 BalaCCodeFile* _tmp140_;
17669 BalaCCodeFunction* _tmp141_;
17670 gchar* result = NULL((void*)0);
17671 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
17672 g_return_val_if_fail (value_type != NULL, NULL)do { if ((value_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value_type != NULL"
); return (((void*)0)); } } while (0)
;
17673 _tmp0_ = bala_data_type_get_type_symbol ((BalaDataType*) value_type);
17674 _tmp1_ = _tmp0_;
17675 _tmp2_ = bala_get_ccode_lower_case_prefix ((BalaSymbol*) _tmp1_);
17676 _tmp3_ = _tmp2_;
17677 _tmp4_ = g_strdup_printf ("_%sdup", _tmp3_);
17678 _tmp5_ = _tmp4_;
17679 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
17680 dup_func = _tmp5_;
17681 _tmp6_ = dup_func;
17682 if (!bala_ccode_base_module_add_wrapper (self, _tmp6_)) {
17683 result = dup_func;
17684 return result;
17685 }
17686 _tmp7_ = dup_func;
17687 _tmp8_ = bala_get_ccode_name ((BalaCodeNode*) value_type);
17688 _tmp9_ = _tmp8_;
17689 _tmp10_ = bala_ccode_function_new (_tmp7_, _tmp9_);
17690 _tmp11_ = _tmp10_;
17691 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
17692 function = _tmp11_;
17693 _tmp12_ = function;
17694 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp12_, BALA_CCODE_MODIFIERS_STATIC);
17695 _tmp13_ = function;
17696 _tmp14_ = bala_get_ccode_name ((BalaCodeNode*) value_type);
17697 _tmp15_ = _tmp14_;
17698 _tmp16_ = bala_ccode_parameter_new ("self", _tmp15_);
17699 _tmp17_ = _tmp16_;
17700 bala_ccode_function_add_parameter (_tmp13_, _tmp17_);
17701 _bala_ccode_node_unref0 (_tmp17_)((_tmp17_ == ((void*)0)) ? ((void*)0) : (_tmp17_ = (bala_ccode_node_unref
(_tmp17_), ((void*)0))))
;
17702 _g_free0 (_tmp15_)(_tmp15_ = (g_free (_tmp15_), ((void*)0)));
17703 _tmp18_ = function;
17704 bala_ccode_base_module_push_function (self, _tmp18_);
17705 _tmp19_ = bala_data_type_get_type_symbol ((BalaDataType*) value_type);
17706 _tmp20_ = _tmp19_;
17707 _tmp21_ = self->gvalue_type;
17708 if (_tmp20_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp21_), ((bala_typesymbol_get_type ())))))
) {
17709 BalaCCodeFunctionCall* dup_call = NULL((void*)0);
17710 BalaCCodeIdentifier* _tmp22_;
17711 BalaCCodeIdentifier* _tmp23_;
17712 BalaCCodeFunctionCall* _tmp24_;
17713 BalaCCodeFunctionCall* _tmp25_;
17714 BalaCCodeFunctionCall* _tmp26_;
17715 BalaCCodeIdentifier* _tmp27_;
17716 BalaCCodeIdentifier* _tmp28_;
17717 BalaCCodeFunctionCall* _tmp29_;
17718 BalaCCodeIdentifier* _tmp30_;
17719 BalaCCodeIdentifier* _tmp31_;
17720 BalaCCodeFunction* _tmp32_;
17721 BalaCCodeFunction* _tmp33_;
17722 BalaCCodeFunctionCall* _tmp34_;
17723 _tmp22_ = bala_ccode_identifier_new ("g_boxed_copy");
17724 _tmp23_ = _tmp22_;
17725 _tmp24_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp23_);
17726 _tmp25_ = _tmp24_;
17727 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
17728 dup_call = _tmp25_;
17729 _tmp26_ = dup_call;
17730 _tmp27_ = bala_ccode_identifier_new ("G_TYPE_VALUE");
17731 _tmp28_ = _tmp27_;
17732 bala_ccode_function_call_add_argument (_tmp26_, (BalaCCodeExpression*) _tmp28_);
17733 _bala_ccode_node_unref0 (_tmp28_)((_tmp28_ == ((void*)0)) ? ((void*)0) : (_tmp28_ = (bala_ccode_node_unref
(_tmp28_), ((void*)0))))
;
17734 _tmp29_ = dup_call;
17735 _tmp30_ = bala_ccode_identifier_new ("self");
17736 _tmp31_ = _tmp30_;
17737 bala_ccode_function_call_add_argument (_tmp29_, (BalaCCodeExpression*) _tmp31_);
17738 _bala_ccode_node_unref0 (_tmp31_)((_tmp31_ == ((void*)0)) ? ((void*)0) : (_tmp31_ = (bala_ccode_node_unref
(_tmp31_), ((void*)0))))
;
17739 _tmp32_ = bala_ccode_base_module_get_ccode (self);
17740 _tmp33_ = _tmp32_;
17741 _tmp34_ = dup_call;
17742 bala_ccode_function_add_return (_tmp33_, (BalaCCodeExpression*) _tmp34_);
17743 _bala_ccode_node_unref0 (dup_call)((dup_call == ((void*)0)) ? ((void*)0) : (dup_call = (bala_ccode_node_unref
(dup_call), ((void*)0))))
;
17744 } else {
17745 BalaCCodeFunction* _tmp35_;
17746 BalaCCodeFunction* _tmp36_;
17747 gchar* _tmp37_;
17748 gchar* _tmp38_;
17749 BalaCCodeVariableDeclarator* _tmp39_;
17750 BalaCCodeVariableDeclarator* _tmp40_;
17751 BalaCCodeFunctionCall* creation_call = NULL((void*)0);
17752 BalaCodeContext* _tmp41_;
17753 BalaProfile _tmp42_;
17754 BalaProfile _tmp43_;
17755 BalaCCodeFunction* _tmp78_;
17756 BalaCCodeFunction* _tmp79_;
17757 BalaCCodeIdentifier* _tmp80_;
17758 BalaCCodeIdentifier* _tmp81_;
17759 BalaCCodeFunctionCall* _tmp82_;
17760 BalaStruct* st = NULL((void*)0);
17761 BalaTypeSymbol* _tmp83_;
17762 BalaTypeSymbol* _tmp84_;
17763 BalaStruct* _tmp85_;
17764 gboolean _tmp86_ = FALSE(0);
17765 BalaStruct* _tmp87_;
17766 BalaCCodeFunction* _tmp134_;
17767 BalaCCodeFunction* _tmp135_;
17768 BalaCCodeIdentifier* _tmp136_;
17769 BalaCCodeIdentifier* _tmp137_;
17770 _tmp35_ = bala_ccode_base_module_get_ccode (self);
17771 _tmp36_ = _tmp35_;
17772 _tmp37_ = bala_get_ccode_name ((BalaCodeNode*) value_type);
17773 _tmp38_ = _tmp37_;
17774 _tmp39_ = bala_ccode_variable_declarator_new ("dup", NULL((void*)0), NULL((void*)0));
17775 _tmp40_ = _tmp39_;
17776 bala_ccode_function_add_declaration (_tmp36_, _tmp38_, (BalaCCodeDeclarator*) _tmp40_, 0);
17777 _bala_ccode_node_unref0 (_tmp40_)((_tmp40_ == ((void*)0)) ? ((void*)0) : (_tmp40_ = (bala_ccode_node_unref
(_tmp40_), ((void*)0))))
;
17778 _g_free0 (_tmp38_)(_tmp38_ = (g_free (_tmp38_), ((void*)0)));
17779 _tmp41_ = self->priv->_context;
17780 _tmp42_ = bala_code_context_get_profile (_tmp41_);
17781 _tmp43_ = _tmp42_;
17782 if (_tmp43_ == BALA_PROFILE_POSIX) {
17783 BalaCCodeFile* _tmp44_;
17784 BalaCCodeIdentifier* _tmp45_;
17785 BalaCCodeIdentifier* _tmp46_;
17786 BalaCCodeFunctionCall* _tmp47_;
17787 BalaCCodeFunctionCall* _tmp48_;
17788 BalaCCodeConstant* _tmp49_;
17789 BalaCCodeConstant* _tmp50_;
17790 BalaCCodeFunctionCall* csizeof = NULL((void*)0);
17791 BalaCCodeIdentifier* _tmp51_;
17792 BalaCCodeIdentifier* _tmp52_;
17793 BalaCCodeFunctionCall* _tmp53_;
17794 BalaCCodeFunctionCall* _tmp54_;
17795 BalaCCodeFunctionCall* _tmp55_;
17796 BalaTypeSymbol* _tmp56_;
17797 BalaTypeSymbol* _tmp57_;
17798 gchar* _tmp58_;
17799 gchar* _tmp59_;
17800 BalaCCodeIdentifier* _tmp60_;
17801 BalaCCodeIdentifier* _tmp61_;
17802 BalaCCodeFunctionCall* _tmp62_;
17803 BalaCCodeFunctionCall* _tmp63_;
17804 _tmp44_ = self->cfile;
17805 bala_ccode_file_add_include (_tmp44_, "stdlib.h", FALSE(0));
17806 _tmp45_ = bala_ccode_identifier_new ("calloc");
17807 _tmp46_ = _tmp45_;
17808 _tmp47_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp46_);
17809 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
17810 creation_call = _tmp47_;
17811 _bala_ccode_node_unref0 (_tmp46_)((_tmp46_ == ((void*)0)) ? ((void*)0) : (_tmp46_ = (bala_ccode_node_unref
(_tmp46_), ((void*)0))))
;
17812 _tmp48_ = creation_call;
17813 _tmp49_ = bala_ccode_constant_new ("1");
17814 _tmp50_ = _tmp49_;
17815 bala_ccode_function_call_add_argument (_tmp48_, (BalaCCodeExpression*) _tmp50_);
17816 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
17817 _tmp51_ = bala_ccode_identifier_new ("sizeof");
17818 _tmp52_ = _tmp51_;
17819 _tmp53_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp52_);
17820 _tmp54_ = _tmp53_;
17821 _bala_ccode_node_unref0 (_tmp52_)((_tmp52_ == ((void*)0)) ? ((void*)0) : (_tmp52_ = (bala_ccode_node_unref
(_tmp52_), ((void*)0))))
;
17822 csizeof = _tmp54_;
17823 _tmp55_ = csizeof;
17824 _tmp56_ = bala_data_type_get_type_symbol ((BalaDataType*) value_type);
17825 _tmp57_ = _tmp56_;
17826 _tmp58_ = bala_get_ccode_name ((BalaCodeNode*) _tmp57_);
17827 _tmp59_ = _tmp58_;
17828 _tmp60_ = bala_ccode_identifier_new (_tmp59_);
17829 _tmp61_ = _tmp60_;
17830 bala_ccode_function_call_add_argument (_tmp55_, (BalaCCodeExpression*) _tmp61_);
17831 _bala_ccode_node_unref0 (_tmp61_)((_tmp61_ == ((void*)0)) ? ((void*)0) : (_tmp61_ = (bala_ccode_node_unref
(_tmp61_), ((void*)0))))
;
17832 _g_free0 (_tmp59_)(_tmp59_ = (g_free (_tmp59_), ((void*)0)));
17833 _tmp62_ = creation_call;
17834 _tmp63_ = csizeof;
17835 bala_ccode_function_call_add_argument (_tmp62_, (BalaCCodeExpression*) _tmp63_);
17836 _bala_ccode_node_unref0 (csizeof)((csizeof == ((void*)0)) ? ((void*)0) : (csizeof = (bala_ccode_node_unref
(csizeof), ((void*)0))))
;
17837 } else {
17838 BalaCCodeFile* _tmp64_;
17839 BalaCCodeIdentifier* _tmp65_;
17840 BalaCCodeIdentifier* _tmp66_;
17841 BalaCCodeFunctionCall* _tmp67_;
17842 BalaCCodeFunctionCall* _tmp68_;
17843 BalaTypeSymbol* _tmp69_;
17844 BalaTypeSymbol* _tmp70_;
17845 gchar* _tmp71_;
17846 gchar* _tmp72_;
17847 BalaCCodeIdentifier* _tmp73_;
17848 BalaCCodeIdentifier* _tmp74_;
17849 BalaCCodeFunctionCall* _tmp75_;
17850 BalaCCodeConstant* _tmp76_;
17851 BalaCCodeConstant* _tmp77_;
17852 _tmp64_ = self->cfile;
17853 bala_ccode_file_add_include (_tmp64_, "glib.h", FALSE(0));
17854 _tmp65_ = bala_ccode_identifier_new ("g_new0");
17855 _tmp66_ = _tmp65_;
17856 _tmp67_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp66_);
17857 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
17858 creation_call = _tmp67_;
17859 _bala_ccode_node_unref0 (_tmp66_)((_tmp66_ == ((void*)0)) ? ((void*)0) : (_tmp66_ = (bala_ccode_node_unref
(_tmp66_), ((void*)0))))
;
17860 _tmp68_ = creation_call;
17861 _tmp69_ = bala_data_type_get_type_symbol ((BalaDataType*) value_type);
17862 _tmp70_ = _tmp69_;
17863 _tmp71_ = bala_get_ccode_name ((BalaCodeNode*) _tmp70_);
17864 _tmp72_ = _tmp71_;
17865 _tmp73_ = bala_ccode_identifier_new (_tmp72_);
17866 _tmp74_ = _tmp73_;
17867 bala_ccode_function_call_add_argument (_tmp68_, (BalaCCodeExpression*) _tmp74_);
17868 _bala_ccode_node_unref0 (_tmp74_)((_tmp74_ == ((void*)0)) ? ((void*)0) : (_tmp74_ = (bala_ccode_node_unref
(_tmp74_), ((void*)0))))
;
17869 _g_free0 (_tmp72_)(_tmp72_ = (g_free (_tmp72_), ((void*)0)));
17870 _tmp75_ = creation_call;
17871 _tmp76_ = bala_ccode_constant_new ("1");
17872 _tmp77_ = _tmp76_;
17873 bala_ccode_function_call_add_argument (_tmp75_, (BalaCCodeExpression*) _tmp77_);
17874 _bala_ccode_node_unref0 (_tmp77_)((_tmp77_ == ((void*)0)) ? ((void*)0) : (_tmp77_ = (bala_ccode_node_unref
(_tmp77_), ((void*)0))))
;
17875 }
17876 _tmp78_ = bala_ccode_base_module_get_ccode (self);
17877 _tmp79_ = _tmp78_;
17878 _tmp80_ = bala_ccode_identifier_new ("dup");
17879 _tmp81_ = _tmp80_;
17880 _tmp82_ = creation_call;
17881 bala_ccode_function_add_assignment (_tmp79_, (BalaCCodeExpression*) _tmp81_, (BalaCCodeExpression*) _tmp82_);
17882 _bala_ccode_node_unref0 (_tmp81_)((_tmp81_ == ((void*)0)) ? ((void*)0) : (_tmp81_ = (bala_ccode_node_unref
(_tmp81_), ((void*)0))))
;
17883 _tmp83_ = bala_data_type_get_type_symbol ((BalaDataType*) value_type);
17884 _tmp84_ = _tmp83_;
17885 _tmp85_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp84_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp84_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp84_) : NULL((void*)0));
17886 st = _tmp85_;
17887 _tmp87_ = st;
17888 if (_tmp87_ != NULL((void*)0)) {
17889 BalaStruct* _tmp88_;
17890 _tmp88_ = st;
17891 _tmp86_ = bala_struct_is_disposable (_tmp88_);
17892 } else {
17893 _tmp86_ = FALSE(0);
17894 }
17895 if (_tmp86_) {
17896 BalaStruct* _tmp89_;
17897 BalaCCodeFunctionCall* copy_call = NULL((void*)0);
17898 BalaStruct* _tmp91_;
17899 gchar* _tmp92_;
17900 gchar* _tmp93_;
17901 BalaCCodeIdentifier* _tmp94_;
17902 BalaCCodeIdentifier* _tmp95_;
17903 BalaCCodeFunctionCall* _tmp96_;
17904 BalaCCodeFunctionCall* _tmp97_;
17905 BalaCCodeFunctionCall* _tmp98_;
17906 BalaCCodeIdentifier* _tmp99_;
17907 BalaCCodeIdentifier* _tmp100_;
17908 BalaCCodeFunctionCall* _tmp101_;
17909 BalaCCodeIdentifier* _tmp102_;
17910 BalaCCodeIdentifier* _tmp103_;
17911 BalaCCodeFunction* _tmp104_;
17912 BalaCCodeFunction* _tmp105_;
17913 BalaCCodeFunctionCall* _tmp106_;
17914 _tmp89_ = st;
17915 if (!bala_get_ccode_has_copy_function (_tmp89_)) {
17916 BalaStruct* _tmp90_;
17917 _tmp90_ = st;
17918 bala_ccode_base_module_generate_struct_copy_function (self, _tmp90_);
17919 }
17920 _tmp91_ = st;
17921 _tmp92_ = bala_get_ccode_copy_function ((BalaTypeSymbol*) _tmp91_);
17922 _tmp93_ = _tmp92_;
17923 _tmp94_ = bala_ccode_identifier_new (_tmp93_);
17924 _tmp95_ = _tmp94_;
17925 _tmp96_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp95_);
17926 _tmp97_ = _tmp96_;
17927 _bala_ccode_node_unref0 (_tmp95_)((_tmp95_ == ((void*)0)) ? ((void*)0) : (_tmp95_ = (bala_ccode_node_unref
(_tmp95_), ((void*)0))))
;
17928 _g_free0 (_tmp93_)(_tmp93_ = (g_free (_tmp93_), ((void*)0)));
17929 copy_call = _tmp97_;
17930 _tmp98_ = copy_call;
17931 _tmp99_ = bala_ccode_identifier_new ("self");
17932 _tmp100_ = _tmp99_;
17933 bala_ccode_function_call_add_argument (_tmp98_, (BalaCCodeExpression*) _tmp100_);
17934 _bala_ccode_node_unref0 (_tmp100_)((_tmp100_ == ((void*)0)) ? ((void*)0) : (_tmp100_ = (bala_ccode_node_unref
(_tmp100_), ((void*)0))))
;
17935 _tmp101_ = copy_call;
17936 _tmp102_ = bala_ccode_identifier_new ("dup");
17937 _tmp103_ = _tmp102_;
17938 bala_ccode_function_call_add_argument (_tmp101_, (BalaCCodeExpression*) _tmp103_);
17939 _bala_ccode_node_unref0 (_tmp103_)((_tmp103_ == ((void*)0)) ? ((void*)0) : (_tmp103_ = (bala_ccode_node_unref
(_tmp103_), ((void*)0))))
;
17940 _tmp104_ = bala_ccode_base_module_get_ccode (self);
17941 _tmp105_ = _tmp104_;
17942 _tmp106_ = copy_call;
17943 bala_ccode_function_add_expression (_tmp105_, (BalaCCodeExpression*) _tmp106_);
17944 _bala_ccode_node_unref0 (copy_call)((copy_call == ((void*)0)) ? ((void*)0) : (copy_call = (bala_ccode_node_unref
(copy_call), ((void*)0))))
;
17945 } else {
17946 BalaCCodeFile* _tmp107_;
17947 BalaCCodeFunctionCall* sizeof_call = NULL((void*)0);
17948 BalaCCodeIdentifier* _tmp108_;
17949 BalaCCodeIdentifier* _tmp109_;
17950 BalaCCodeFunctionCall* _tmp110_;
17951 BalaCCodeFunctionCall* _tmp111_;
17952 BalaCCodeFunctionCall* _tmp112_;
17953 BalaTypeSymbol* _tmp113_;
17954 BalaTypeSymbol* _tmp114_;
17955 gchar* _tmp115_;
17956 gchar* _tmp116_;
17957 BalaCCodeConstant* _tmp117_;
17958 BalaCCodeConstant* _tmp118_;
17959 BalaCCodeFunctionCall* copy_call = NULL((void*)0);
17960 BalaCCodeIdentifier* _tmp119_;
17961 BalaCCodeIdentifier* _tmp120_;
17962 BalaCCodeFunctionCall* _tmp121_;
17963 BalaCCodeFunctionCall* _tmp122_;
17964 BalaCCodeFunctionCall* _tmp123_;
17965 BalaCCodeIdentifier* _tmp124_;
17966 BalaCCodeIdentifier* _tmp125_;
17967 BalaCCodeFunctionCall* _tmp126_;
17968 BalaCCodeIdentifier* _tmp127_;
17969 BalaCCodeIdentifier* _tmp128_;
17970 BalaCCodeFunctionCall* _tmp129_;
17971 BalaCCodeFunctionCall* _tmp130_;
17972 BalaCCodeFunction* _tmp131_;
17973 BalaCCodeFunction* _tmp132_;
17974 BalaCCodeFunctionCall* _tmp133_;
17975 _tmp107_ = self->cfile;
17976 bala_ccode_file_add_include (_tmp107_, "string.h", FALSE(0));
17977 _tmp108_ = bala_ccode_identifier_new ("sizeof");
17978 _tmp109_ = _tmp108_;
17979 _tmp110_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp109_);
17980 _tmp111_ = _tmp110_;
17981 _bala_ccode_node_unref0 (_tmp109_)((_tmp109_ == ((void*)0)) ? ((void*)0) : (_tmp109_ = (bala_ccode_node_unref
(_tmp109_), ((void*)0))))
;
17982 sizeof_call = _tmp111_;
17983 _tmp112_ = sizeof_call;
17984 _tmp113_ = bala_data_type_get_type_symbol ((BalaDataType*) value_type);
17985 _tmp114_ = _tmp113_;
17986 _tmp115_ = bala_get_ccode_name ((BalaCodeNode*) _tmp114_);
17987 _tmp116_ = _tmp115_;
17988 _tmp117_ = bala_ccode_constant_new (_tmp116_);
17989 _tmp118_ = _tmp117_;
17990 bala_ccode_function_call_add_argument (_tmp112_, (BalaCCodeExpression*) _tmp118_);
17991 _bala_ccode_node_unref0 (_tmp118_)((_tmp118_ == ((void*)0)) ? ((void*)0) : (_tmp118_ = (bala_ccode_node_unref
(_tmp118_), ((void*)0))))
;
17992 _g_free0 (_tmp116_)(_tmp116_ = (g_free (_tmp116_), ((void*)0)));
17993 _tmp119_ = bala_ccode_identifier_new ("memcpy");
17994 _tmp120_ = _tmp119_;
17995 _tmp121_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp120_);
17996 _tmp122_ = _tmp121_;
17997 _bala_ccode_node_unref0 (_tmp120_)((_tmp120_ == ((void*)0)) ? ((void*)0) : (_tmp120_ = (bala_ccode_node_unref
(_tmp120_), ((void*)0))))
;
17998 copy_call = _tmp122_;
17999 _tmp123_ = copy_call;
18000 _tmp124_ = bala_ccode_identifier_new ("dup");
18001 _tmp125_ = _tmp124_;
18002 bala_ccode_function_call_add_argument (_tmp123_, (BalaCCodeExpression*) _tmp125_);
18003 _bala_ccode_node_unref0 (_tmp125_)((_tmp125_ == ((void*)0)) ? ((void*)0) : (_tmp125_ = (bala_ccode_node_unref
(_tmp125_), ((void*)0))))
;
18004 _tmp126_ = copy_call;
18005 _tmp127_ = bala_ccode_identifier_new ("self");
18006 _tmp128_ = _tmp127_;
18007 bala_ccode_function_call_add_argument (_tmp126_, (BalaCCodeExpression*) _tmp128_);
18008 _bala_ccode_node_unref0 (_tmp128_)((_tmp128_ == ((void*)0)) ? ((void*)0) : (_tmp128_ = (bala_ccode_node_unref
(_tmp128_), ((void*)0))))
;
18009 _tmp129_ = copy_call;
18010 _tmp130_ = sizeof_call;
18011 bala_ccode_function_call_add_argument (_tmp129_, (BalaCCodeExpression*) _tmp130_);
18012 _tmp131_ = bala_ccode_base_module_get_ccode (self);
18013 _tmp132_ = _tmp131_;
18014 _tmp133_ = copy_call;
18015 bala_ccode_function_add_expression (_tmp132_, (BalaCCodeExpression*) _tmp133_);
18016 _bala_ccode_node_unref0 (copy_call)((copy_call == ((void*)0)) ? ((void*)0) : (copy_call = (bala_ccode_node_unref
(copy_call), ((void*)0))))
;
18017 _bala_ccode_node_unref0 (sizeof_call)((sizeof_call == ((void*)0)) ? ((void*)0) : (sizeof_call = (bala_ccode_node_unref
(sizeof_call), ((void*)0))))
;
18018 }
18019 _tmp134_ = bala_ccode_base_module_get_ccode (self);
18020 _tmp135_ = _tmp134_;
18021 _tmp136_ = bala_ccode_identifier_new ("dup");
18022 _tmp137_ = _tmp136_;
18023 bala_ccode_function_add_return (_tmp135_, (BalaCCodeExpression*) _tmp137_);
18024 _bala_ccode_node_unref0 (_tmp137_)((_tmp137_ == ((void*)0)) ? ((void*)0) : (_tmp137_ = (bala_ccode_node_unref
(_tmp137_), ((void*)0))))
;
18025 _bala_code_node_unref0 (st)((st == ((void*)0)) ? ((void*)0) : (st = (bala_code_node_unref
(st), ((void*)0))))
;
18026 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
18027 }
18028 bala_ccode_base_module_pop_function (self);
18029 _tmp138_ = self->cfile;
18030 _tmp139_ = function;
18031 bala_ccode_file_add_function_declaration (_tmp138_, _tmp139_);
18032 _tmp140_ = self->cfile;
18033 _tmp141_ = function;
18034 bala_ccode_file_add_function (_tmp140_, _tmp141_);
18035 result = dup_func;
18036 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
18037 return result;
18038}
18039
18040gchar*
18041bala_ccode_base_module_generate_dup_func_wrapper (BalaCCodeBaseModule* self,
18042 BalaDataType* type)
18043{
18044 gchar* destroy_func = NULL((void*)0);
18045 BalaTypeSymbol* _tmp0_;
18046 BalaTypeSymbol* _tmp1_;
18047 gchar* _tmp2_;
18048 gchar* _tmp3_;
18049 gchar* _tmp4_;
18050 gchar* _tmp5_;
18051 const gchar* _tmp6_;
18052 BalaCCodeFunction* function = NULL((void*)0);
18053 const gchar* _tmp7_;
18054 gchar* _tmp8_;
18055 gchar* _tmp9_;
18056 BalaCCodeFunction* _tmp10_;
18057 BalaCCodeFunction* _tmp11_;
18058 BalaCCodeFunction* _tmp12_;
18059 BalaCCodeFunction* _tmp13_;
18060 gchar* _tmp14_;
18061 gchar* _tmp15_;
18062 BalaCCodeParameter* _tmp16_;
18063 BalaCCodeParameter* _tmp17_;
18064 BalaCCodeFunction* _tmp18_;
18065 BalaCCodeFunctionCall* free_call = NULL((void*)0);
18066 BalaCCodeIdentifier* _tmp19_;
18067 BalaCCodeIdentifier* _tmp20_;
18068 BalaCCodeFunctionCall* _tmp21_;
18069 BalaCCodeFunctionCall* _tmp22_;
18070 BalaCCodeFunctionCall* _tmp23_;
18071 BalaTypeSymbol* _tmp24_;
18072 BalaTypeSymbol* _tmp25_;
18073 gchar* _tmp26_;
18074 gchar* _tmp27_;
18075 BalaCCodeIdentifier* _tmp28_;
18076 BalaCCodeIdentifier* _tmp29_;
18077 BalaCCodeFunctionCall* _tmp30_;
18078 BalaCCodeIdentifier* _tmp31_;
18079 BalaCCodeIdentifier* _tmp32_;
18080 BalaCCodeFunction* _tmp33_;
18081 BalaCCodeFunction* _tmp34_;
18082 BalaCCodeFunctionCall* _tmp35_;
18083 BalaCCodeFile* _tmp36_;
18084 BalaCCodeFunction* _tmp37_;
18085 BalaCCodeFile* _tmp38_;
18086 BalaCCodeFunction* _tmp39_;
18087 gchar* result = NULL((void*)0);
18088 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
18089 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
18090 _tmp0_ = bala_data_type_get_type_symbol (type);
18091 _tmp1_ = _tmp0_;
18092 _tmp2_ = bala_get_ccode_name ((BalaCodeNode*) _tmp1_);
18093 _tmp3_ = _tmp2_;
18094 _tmp4_ = g_strdup_printf ("_bala_%s_copy", _tmp3_);
18095 _tmp5_ = _tmp4_;
18096 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
18097 destroy_func = _tmp5_;
18098 _tmp6_ = destroy_func;
18099 if (!bala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18100 result = destroy_func;
18101 return result;
18102 }
18103 _tmp7_ = destroy_func;
18104 _tmp8_ = bala_get_ccode_name ((BalaCodeNode*) type);
18105 _tmp9_ = _tmp8_;
18106 _tmp10_ = bala_ccode_function_new (_tmp7_, _tmp9_);
18107 _tmp11_ = _tmp10_;
18108 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
18109 function = _tmp11_;
18110 _tmp12_ = function;
18111 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp12_, BALA_CCODE_MODIFIERS_STATIC);
18112 _tmp13_ = function;
18113 _tmp14_ = bala_get_ccode_name ((BalaCodeNode*) type);
18114 _tmp15_ = _tmp14_;
18115 _tmp16_ = bala_ccode_parameter_new ("self", _tmp15_);
18116 _tmp17_ = _tmp16_;
18117 bala_ccode_function_add_parameter (_tmp13_, _tmp17_);
18118 _bala_ccode_node_unref0 (_tmp17_)((_tmp17_ == ((void*)0)) ? ((void*)0) : (_tmp17_ = (bala_ccode_node_unref
(_tmp17_), ((void*)0))))
;
18119 _g_free0 (_tmp15_)(_tmp15_ = (g_free (_tmp15_), ((void*)0)));
18120 _tmp18_ = function;
18121 bala_ccode_base_module_push_function (self, _tmp18_);
18122 _tmp19_ = bala_ccode_identifier_new ("g_boxed_copy");
18123 _tmp20_ = _tmp19_;
18124 _tmp21_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp20_);
18125 _tmp22_ = _tmp21_;
18126 _bala_ccode_node_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_node_unref
(_tmp20_), ((void*)0))))
;
18127 free_call = _tmp22_;
18128 _tmp23_ = free_call;
18129 _tmp24_ = bala_data_type_get_type_symbol (type);
18130 _tmp25_ = _tmp24_;
18131 _tmp26_ = bala_get_ccode_type_id ((BalaCodeNode*) _tmp25_);
18132 _tmp27_ = _tmp26_;
18133 _tmp28_ = bala_ccode_identifier_new (_tmp27_);
18134 _tmp29_ = _tmp28_;
18135 bala_ccode_function_call_add_argument (_tmp23_, (BalaCCodeExpression*) _tmp29_);
18136 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
18137 _g_free0 (_tmp27_)(_tmp27_ = (g_free (_tmp27_), ((void*)0)));
18138 _tmp30_ = free_call;
18139 _tmp31_ = bala_ccode_identifier_new ("self");
18140 _tmp32_ = _tmp31_;
18141 bala_ccode_function_call_add_argument (_tmp30_, (BalaCCodeExpression*) _tmp32_);
18142 _bala_ccode_node_unref0 (_tmp32_)((_tmp32_ == ((void*)0)) ? ((void*)0) : (_tmp32_ = (bala_ccode_node_unref
(_tmp32_), ((void*)0))))
;
18143 _tmp33_ = bala_ccode_base_module_get_ccode (self);
18144 _tmp34_ = _tmp33_;
18145 _tmp35_ = free_call;
18146 bala_ccode_function_add_return (_tmp34_, (BalaCCodeExpression*) _tmp35_);
18147 bala_ccode_base_module_pop_function (self);
18148 _tmp36_ = self->cfile;
18149 _tmp37_ = function;
18150 bala_ccode_file_add_function_declaration (_tmp36_, _tmp37_);
18151 _tmp38_ = self->cfile;
18152 _tmp39_ = function;
18153 bala_ccode_file_add_function (_tmp38_, _tmp39_);
18154 result = destroy_func;
18155 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
18156 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
18157 return result;
18158}
18159
18160gchar*
18161bala_ccode_base_module_generate_free_function_address_of_wrapper (BalaCCodeBaseModule* self,
18162 BalaDataType* type)
18163{
18164 gchar* destroy_func = NULL((void*)0);
18165 BalaTypeSymbol* _tmp0_;
18166 BalaTypeSymbol* _tmp1_;
18167 gchar* _tmp2_;
18168 gchar* _tmp3_;
18169 gchar* _tmp4_;
18170 gchar* _tmp5_;
18171 const gchar* _tmp6_;
18172 BalaCCodeFunction* function = NULL((void*)0);
18173 const gchar* _tmp7_;
18174 BalaCCodeFunction* _tmp8_;
18175 BalaCCodeFunction* _tmp9_;
18176 BalaCCodeFunction* _tmp10_;
18177 gchar* _tmp11_;
18178 gchar* _tmp12_;
18179 BalaCCodeParameter* _tmp13_;
18180 BalaCCodeParameter* _tmp14_;
18181 BalaCCodeFunction* _tmp15_;
18182 BalaClass* cl = NULL((void*)0);
18183 BalaTypeSymbol* _tmp16_;
18184 BalaTypeSymbol* _tmp17_;
18185 BalaClass* _tmp18_;
18186 BalaCCodeFunctionCall* free_call = NULL((void*)0);
18187 BalaClass* _tmp19_;
18188 gchar* _tmp20_;
18189 gchar* _tmp21_;
18190 BalaCCodeIdentifier* _tmp22_;
18191 BalaCCodeIdentifier* _tmp23_;
18192 BalaCCodeFunctionCall* _tmp24_;
18193 BalaCCodeFunctionCall* _tmp25_;
18194 BalaCCodeFunctionCall* _tmp26_;
18195 BalaCCodeIdentifier* _tmp27_;
18196 BalaCCodeIdentifier* _tmp28_;
18197 BalaCCodeUnaryExpression* _tmp29_;
18198 BalaCCodeUnaryExpression* _tmp30_;
18199 BalaCCodeFunction* _tmp31_;
18200 BalaCCodeFunction* _tmp32_;
18201 BalaCCodeFunctionCall* _tmp33_;
18202 BalaCCodeFile* _tmp34_;
18203 BalaCCodeFunction* _tmp35_;
18204 BalaCCodeFile* _tmp36_;
18205 BalaCCodeFunction* _tmp37_;
18206 gchar* result = NULL((void*)0);
18207 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
18208 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
18209 _tmp0_ = bala_data_type_get_type_symbol (type);
18210 _tmp1_ = _tmp0_;
18211 _tmp2_ = bala_get_ccode_name ((BalaCodeNode*) _tmp1_);
18212 _tmp3_ = _tmp2_;
18213 _tmp4_ = g_strdup_printf ("_bala_%s_free_function_address_of", _tmp3_);
18214 _tmp5_ = _tmp4_;
18215 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
18216 destroy_func = _tmp5_;
18217 _tmp6_ = destroy_func;
18218 if (!bala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18219 result = destroy_func;
18220 return result;
18221 }
18222 _tmp7_ = destroy_func;
18223 _tmp8_ = bala_ccode_function_new (_tmp7_, "void");
18224 function = _tmp8_;
18225 _tmp9_ = function;
18226 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp9_, BALA_CCODE_MODIFIERS_STATIC);
18227 _tmp10_ = function;
18228 _tmp11_ = bala_get_ccode_name ((BalaCodeNode*) type);
18229 _tmp12_ = _tmp11_;
18230 _tmp13_ = bala_ccode_parameter_new ("self", _tmp12_);
18231 _tmp14_ = _tmp13_;
18232 bala_ccode_function_add_parameter (_tmp10_, _tmp14_);
18233 _bala_ccode_node_unref0 (_tmp14_)((_tmp14_ == ((void*)0)) ? ((void*)0) : (_tmp14_ = (bala_ccode_node_unref
(_tmp14_), ((void*)0))))
;
18234 _g_free0 (_tmp12_)(_tmp12_ = (g_free (_tmp12_), ((void*)0)));
18235 _tmp15_ = function;
18236 bala_ccode_base_module_push_function (self, _tmp15_);
18237 _tmp16_ = bala_data_type_get_type_symbol (type);
18238 _tmp17_ = _tmp16_;
18239 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp17_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp17_) : NULL((void*)0);
18240 _tmp18_ = cl;
18241 _bala_assert (_tmp18_ != NULL, "cl != null")if (_tmp18_ != ((void*)0)) ; else g_assertion_message_expr ("bala-ccodegen"
, "balaccodebasemodule.c", 18241, ((const char*) (__func__)),
"cl != null");
;
18242 _tmp19_ = cl;
18243 _tmp20_ = bala_get_ccode_free_function ((BalaTypeSymbol*) _tmp19_);
18244 _tmp21_ = _tmp20_;
18245 _tmp22_ = bala_ccode_identifier_new (_tmp21_);
18246 _tmp23_ = _tmp22_;
18247 _tmp24_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp23_);
18248 _tmp25_ = _tmp24_;
18249 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
18250 _g_free0 (_tmp21_)(_tmp21_ = (g_free (_tmp21_), ((void*)0)));
18251 free_call = _tmp25_;
18252 _tmp26_ = free_call;
18253 _tmp27_ = bala_ccode_identifier_new ("self");
18254 _tmp28_ = _tmp27_;
18255 _tmp29_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp28_);
18256 _tmp30_ = _tmp29_;
18257 bala_ccode_function_call_add_argument (_tmp26_, (BalaCCodeExpression*) _tmp30_);
18258 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
18259 _bala_ccode_node_unref0 (_tmp28_)((_tmp28_ == ((void*)0)) ? ((void*)0) : (_tmp28_ = (bala_ccode_node_unref
(_tmp28_), ((void*)0))))
;
18260 _tmp31_ = bala_ccode_base_module_get_ccode (self);
18261 _tmp32_ = _tmp31_;
18262 _tmp33_ = free_call;
18263 bala_ccode_function_add_expression (_tmp32_, (BalaCCodeExpression*) _tmp33_);
18264 bala_ccode_base_module_pop_function (self);
18265 _tmp34_ = self->cfile;
18266 _tmp35_ = function;
18267 bala_ccode_file_add_function_declaration (_tmp34_, _tmp35_);
18268 _tmp36_ = self->cfile;
18269 _tmp37_ = function;
18270 bala_ccode_file_add_function (_tmp36_, _tmp37_);
18271 result = destroy_func;
18272 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
18273 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
18274 return result;
18275}
18276
18277gchar*
18278bala_ccode_base_module_generate_destroy_function_content_of_wrapper (BalaCCodeBaseModule* self,
18279 BalaDataType* type)
18280{
18281 gchar* destroy_func = NULL((void*)0);
18282 BalaTypeSymbol* _tmp0_;
18283 BalaTypeSymbol* _tmp1_;
18284 gchar* _tmp2_;
18285 gchar* _tmp3_;
18286 gchar* _tmp4_;
18287 gchar* _tmp5_;
18288 const gchar* _tmp6_;
18289 BalaCCodeFunction* function = NULL((void*)0);
18290 const gchar* _tmp7_;
18291 BalaCCodeFunction* _tmp8_;
18292 BalaCCodeFunction* _tmp9_;
18293 BalaCCodeFunction* _tmp10_;
18294 BalaDataType* _tmp11_;
18295 gchar* _tmp12_;
18296 gchar* _tmp13_;
18297 BalaCCodeParameter* _tmp14_;
18298 BalaCCodeParameter* _tmp15_;
18299 BalaCCodeFunction* _tmp16_;
18300 BalaCCodeFunction* _tmp17_;
18301 BalaCCodeFunction* _tmp18_;
18302 gchar* _tmp19_;
18303 gchar* _tmp20_;
18304 BalaCCodeVariableDeclarator* _tmp21_;
18305 BalaCCodeVariableDeclarator* _tmp22_;
18306 BalaCCodeUnaryExpression* cast = NULL((void*)0);
18307 BalaCCodeIdentifier* _tmp23_;
18308 BalaCCodeIdentifier* _tmp24_;
18309 gchar* _tmp25_;
18310 gchar* _tmp26_;
18311 gchar* _tmp27_;
18312 gchar* _tmp28_;
18313 BalaCCodeCastExpression* _tmp29_;
18314 BalaCCodeCastExpression* _tmp30_;
18315 BalaCCodeUnaryExpression* _tmp31_;
18316 BalaCCodeUnaryExpression* _tmp32_;
18317 BalaCCodeFunction* _tmp33_;
18318 BalaCCodeFunction* _tmp34_;
18319 BalaCCodeIdentifier* _tmp35_;
18320 BalaCCodeIdentifier* _tmp36_;
18321 BalaCCodeUnaryExpression* _tmp37_;
18322 BalaCCodeFunctionCall* free_call = NULL((void*)0);
18323 BalaCCodeExpression* _tmp38_;
18324 BalaCCodeExpression* _tmp39_;
18325 BalaCCodeFunctionCall* _tmp40_;
18326 BalaCCodeFunctionCall* _tmp41_;
18327 BalaCCodeFunctionCall* _tmp42_;
18328 BalaCCodeIdentifier* _tmp43_;
18329 BalaCCodeIdentifier* _tmp44_;
18330 BalaCCodeFunction* _tmp45_;
18331 BalaCCodeFunction* _tmp46_;
18332 BalaCCodeFunctionCall* _tmp47_;
18333 BalaCCodeFile* _tmp48_;
18334 BalaCCodeFunction* _tmp49_;
18335 BalaCCodeFile* _tmp50_;
18336 BalaCCodeFunction* _tmp51_;
18337 gchar* result = NULL((void*)0);
18338 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
18339 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
18340 _tmp0_ = bala_data_type_get_type_symbol (type);
18341 _tmp1_ = _tmp0_;
18342 _tmp2_ = bala_get_ccode_name ((BalaCodeNode*) _tmp1_);
18343 _tmp3_ = _tmp2_;
18344 _tmp4_ = g_strdup_printf ("_bala_%s_free_function_content_of", _tmp3_);
18345 _tmp5_ = _tmp4_;
18346 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
18347 destroy_func = _tmp5_;
18348 _tmp6_ = destroy_func;
18349 if (!bala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18350 result = destroy_func;
18351 return result;
18352 }
18353 _tmp7_ = destroy_func;
18354 _tmp8_ = bala_ccode_function_new (_tmp7_, "void");
18355 function = _tmp8_;
18356 _tmp9_ = function;
18357 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp9_, BALA_CCODE_MODIFIERS_STATIC);
18358 _tmp10_ = function;
18359 _tmp11_ = self->pointer_type;
18360 _tmp12_ = bala_get_ccode_name ((BalaCodeNode*) _tmp11_);
18361 _tmp13_ = _tmp12_;
18362 _tmp14_ = bala_ccode_parameter_new ("data", _tmp13_);
18363 _tmp15_ = _tmp14_;
18364 bala_ccode_function_add_parameter (_tmp10_, _tmp15_);
18365 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
18366 _g_free0 (_tmp13_)(_tmp13_ = (g_free (_tmp13_), ((void*)0)));
18367 _tmp16_ = function;
18368 bala_ccode_base_module_push_function (self, _tmp16_);
18369 _tmp17_ = bala_ccode_base_module_get_ccode (self);
18370 _tmp18_ = _tmp17_;
18371 _tmp19_ = bala_get_ccode_name ((BalaCodeNode*) type);
18372 _tmp20_ = _tmp19_;
18373 _tmp21_ = bala_ccode_variable_declarator_new ("self", NULL((void*)0), NULL((void*)0));
18374 _tmp22_ = _tmp21_;
18375 bala_ccode_function_add_declaration (_tmp18_, _tmp20_, (BalaCCodeDeclarator*) _tmp22_, 0);
18376 _bala_ccode_node_unref0 (_tmp22_)((_tmp22_ == ((void*)0)) ? ((void*)0) : (_tmp22_ = (bala_ccode_node_unref
(_tmp22_), ((void*)0))))
;
18377 _g_free0 (_tmp20_)(_tmp20_ = (g_free (_tmp20_), ((void*)0)));
18378 _tmp23_ = bala_ccode_identifier_new ("data");
18379 _tmp24_ = _tmp23_;
18380 _tmp25_ = bala_get_ccode_name ((BalaCodeNode*) type);
18381 _tmp26_ = _tmp25_;
18382 _tmp27_ = g_strconcat (_tmp26_, "*", NULL((void*)0));
18383 _tmp28_ = _tmp27_;
18384 _tmp29_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp24_, _tmp28_);
18385 _tmp30_ = _tmp29_;
18386 _tmp31_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, (BalaCCodeExpression*) _tmp30_);
18387 _tmp32_ = _tmp31_;
18388 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
18389 _g_free0 (_tmp28_)(_tmp28_ = (g_free (_tmp28_), ((void*)0)));
18390 _g_free0 (_tmp26_)(_tmp26_ = (g_free (_tmp26_), ((void*)0)));
18391 _bala_ccode_node_unref0 (_tmp24_)((_tmp24_ == ((void*)0)) ? ((void*)0) : (_tmp24_ = (bala_ccode_node_unref
(_tmp24_), ((void*)0))))
;
18392 cast = _tmp32_;
18393 _tmp33_ = bala_ccode_base_module_get_ccode (self);
18394 _tmp34_ = _tmp33_;
18395 _tmp35_ = bala_ccode_identifier_new ("self");
18396 _tmp36_ = _tmp35_;
18397 _tmp37_ = cast;
18398 bala_ccode_function_add_assignment (_tmp34_, (BalaCCodeExpression*) _tmp36_, (BalaCCodeExpression*) _tmp37_);
18399 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
18400 _tmp38_ = bala_ccode_base_module_get_destroy0_func_expression (self, type, FALSE(0));
18401 _tmp39_ = _tmp38_;
18402 _tmp40_ = bala_ccode_function_call_new (_tmp39_);
18403 _tmp41_ = _tmp40_;
18404 _bala_ccode_node_unref0 (_tmp39_)((_tmp39_ == ((void*)0)) ? ((void*)0) : (_tmp39_ = (bala_ccode_node_unref
(_tmp39_), ((void*)0))))
;
18405 free_call = _tmp41_;
18406 _tmp42_ = free_call;
18407 _tmp43_ = bala_ccode_identifier_new ("self");
18408 _tmp44_ = _tmp43_;
18409 bala_ccode_function_call_add_argument (_tmp42_, (BalaCCodeExpression*) _tmp44_);
18410 _bala_ccode_node_unref0 (_tmp44_)((_tmp44_ == ((void*)0)) ? ((void*)0) : (_tmp44_ = (bala_ccode_node_unref
(_tmp44_), ((void*)0))))
;
18411 _tmp45_ = bala_ccode_base_module_get_ccode (self);
18412 _tmp46_ = _tmp45_;
18413 _tmp47_ = free_call;
18414 bala_ccode_function_add_expression (_tmp46_, (BalaCCodeExpression*) _tmp47_);
18415 bala_ccode_base_module_pop_function (self);
18416 _tmp48_ = self->cfile;
18417 _tmp49_ = function;
18418 bala_ccode_file_add_function_declaration (_tmp48_, _tmp49_);
18419 _tmp50_ = self->cfile;
18420 _tmp51_ = function;
18421 bala_ccode_file_add_function (_tmp50_, _tmp51_);
18422 result = destroy_func;
18423 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
18424 _bala_ccode_node_unref0 (cast)((cast == ((void*)0)) ? ((void*)0) : (cast = (bala_ccode_node_unref
(cast), ((void*)0))))
;
18425 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
18426 return result;
18427}
18428
18429gchar*
18430bala_ccode_base_module_generate_free_func_wrapper (BalaCCodeBaseModule* self,
18431 BalaDataType* type)
18432{
18433 gchar* destroy_func = NULL((void*)0);
18434 BalaTypeSymbol* _tmp0_;
18435 BalaTypeSymbol* _tmp1_;
18436 gchar* _tmp2_;
18437 gchar* _tmp3_;
18438 gchar* _tmp4_;
18439 gchar* _tmp5_;
18440 const gchar* _tmp6_;
18441 BalaCCodeFunction* function = NULL((void*)0);
18442 const gchar* _tmp7_;
18443 BalaCCodeFunction* _tmp8_;
18444 BalaCCodeFunction* _tmp9_;
18445 BalaCCodeFunction* _tmp10_;
18446 gchar* _tmp11_;
18447 gchar* _tmp12_;
18448 BalaCCodeParameter* _tmp13_;
18449 BalaCCodeParameter* _tmp14_;
18450 BalaCCodeFunction* _tmp15_;
18451 gboolean _tmp16_ = FALSE(0);
18452 BalaTypeSymbol* _tmp17_;
18453 BalaTypeSymbol* _tmp18_;
18454 BalaCCodeFile* _tmp78_;
18455 BalaCCodeFunction* _tmp79_;
18456 BalaCCodeFile* _tmp80_;
18457 BalaCCodeFunction* _tmp81_;
18458 gchar* result = NULL((void*)0);
18459 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
18460 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
18461 _tmp0_ = bala_data_type_get_type_symbol (type);
18462 _tmp1_ = _tmp0_;
18463 _tmp2_ = bala_get_ccode_name ((BalaCodeNode*) _tmp1_);
18464 _tmp3_ = _tmp2_;
18465 _tmp4_ = g_strdup_printf ("_bala_%s_free", _tmp3_);
18466 _tmp5_ = _tmp4_;
18467 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
18468 destroy_func = _tmp5_;
18469 _tmp6_ = destroy_func;
18470 if (!bala_ccode_base_module_add_wrapper (self, _tmp6_)) {
18471 result = destroy_func;
18472 return result;
18473 }
18474 _tmp7_ = destroy_func;
18475 _tmp8_ = bala_ccode_function_new (_tmp7_, "void");
18476 function = _tmp8_;
18477 _tmp9_ = function;
18478 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp9_, BALA_CCODE_MODIFIERS_STATIC);
18479 _tmp10_ = function;
18480 _tmp11_ = bala_get_ccode_name ((BalaCodeNode*) type);
18481 _tmp12_ = _tmp11_;
18482 _tmp13_ = bala_ccode_parameter_new ("self", _tmp12_);
18483 _tmp14_ = _tmp13_;
18484 bala_ccode_function_add_parameter (_tmp10_, _tmp14_);
18485 _bala_ccode_node_unref0 (_tmp14_)((_tmp14_ == ((void*)0)) ? ((void*)0) : (_tmp14_ = (bala_ccode_node_unref
(_tmp14_), ((void*)0))))
;
18486 _g_free0 (_tmp12_)(_tmp12_ = (g_free (_tmp12_), ((void*)0)));
18487 _tmp15_ = function;
18488 bala_ccode_base_module_push_function (self, _tmp15_);
18489 _tmp17_ = bala_data_type_get_type_symbol (type);
18490 _tmp18_ = _tmp17_;
18491 if (bala_get_ccode_is_gboxed (_tmp18_)) {
18492 _tmp16_ = TRUE(!(0));
18493 } else {
18494 gboolean _tmp19_ = FALSE(0);
18495 BalaStruct* _tmp20_;
18496 _tmp20_ = self->gvalue_type;
18497 if (_tmp20_ != NULL((void*)0)) {
18498 BalaTypeSymbol* _tmp21_;
18499 BalaTypeSymbol* _tmp22_;
18500 BalaStruct* _tmp23_;
18501 _tmp21_ = bala_data_type_get_type_symbol (type);
18502 _tmp22_ = _tmp21_;
18503 _tmp23_ = self->gvalue_type;
18504 _tmp19_ = _tmp22_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp23_), ((bala_typesymbol_get_type ())))))
;
18505 } else {
18506 _tmp19_ = FALSE(0);
18507 }
18508 _tmp16_ = _tmp19_;
18509 }
18510 if (_tmp16_) {
18511 BalaCCodeFunctionCall* free_call = NULL((void*)0);
18512 BalaCCodeIdentifier* _tmp24_;
18513 BalaCCodeIdentifier* _tmp25_;
18514 BalaCCodeFunctionCall* _tmp26_;
18515 BalaCCodeFunctionCall* _tmp27_;
18516 BalaCCodeFunctionCall* _tmp28_;
18517 BalaTypeSymbol* _tmp29_;
18518 BalaTypeSymbol* _tmp30_;
18519 gchar* _tmp31_;
18520 gchar* _tmp32_;
18521 BalaCCodeIdentifier* _tmp33_;
18522 BalaCCodeIdentifier* _tmp34_;
18523 BalaCCodeFunctionCall* _tmp35_;
18524 BalaCCodeIdentifier* _tmp36_;
18525 BalaCCodeIdentifier* _tmp37_;
18526 BalaCCodeFunction* _tmp38_;
18527 BalaCCodeFunction* _tmp39_;
18528 BalaCCodeFunctionCall* _tmp40_;
18529 _tmp24_ = bala_ccode_identifier_new ("g_boxed_free");
18530 _tmp25_ = _tmp24_;
18531 _tmp26_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp25_);
18532 _tmp27_ = _tmp26_;
18533 _bala_ccode_node_unref0 (_tmp25_)((_tmp25_ == ((void*)0)) ? ((void*)0) : (_tmp25_ = (bala_ccode_node_unref
(_tmp25_), ((void*)0))))
;
18534 free_call = _tmp27_;
18535 _tmp28_ = free_call;
18536 _tmp29_ = bala_data_type_get_type_symbol (type);
18537 _tmp30_ = _tmp29_;
18538 _tmp31_ = bala_get_ccode_type_id ((BalaCodeNode*) _tmp30_);
18539 _tmp32_ = _tmp31_;
18540 _tmp33_ = bala_ccode_identifier_new (_tmp32_);
18541 _tmp34_ = _tmp33_;
18542 bala_ccode_function_call_add_argument (_tmp28_, (BalaCCodeExpression*) _tmp34_);
18543 _bala_ccode_node_unref0 (_tmp34_)((_tmp34_ == ((void*)0)) ? ((void*)0) : (_tmp34_ = (bala_ccode_node_unref
(_tmp34_), ((void*)0))))
;
18544 _g_free0 (_tmp32_)(_tmp32_ = (g_free (_tmp32_), ((void*)0)));
18545 _tmp35_ = free_call;
18546 _tmp36_ = bala_ccode_identifier_new ("self");
18547 _tmp37_ = _tmp36_;
18548 bala_ccode_function_call_add_argument (_tmp35_, (BalaCCodeExpression*) _tmp37_);
18549 _bala_ccode_node_unref0 (_tmp37_)((_tmp37_ == ((void*)0)) ? ((void*)0) : (_tmp37_ = (bala_ccode_node_unref
(_tmp37_), ((void*)0))))
;
18550 _tmp38_ = bala_ccode_base_module_get_ccode (self);
18551 _tmp39_ = _tmp38_;
18552 _tmp40_ = free_call;
18553 bala_ccode_function_add_expression (_tmp39_, (BalaCCodeExpression*) _tmp40_);
18554 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
18555 } else {
18556 BalaStruct* st = NULL((void*)0);
18557 BalaTypeSymbol* _tmp41_;
18558 BalaTypeSymbol* _tmp42_;
18559 gboolean _tmp43_ = FALSE(0);
18560 BalaStruct* _tmp44_;
18561 BalaCCodeFunctionCall* free_call = NULL((void*)0);
18562 BalaCodeContext* _tmp61_;
18563 BalaProfile _tmp62_;
18564 BalaProfile _tmp63_;
18565 BalaCCodeFunctionCall* _tmp72_;
18566 BalaCCodeIdentifier* _tmp73_;
18567 BalaCCodeIdentifier* _tmp74_;
18568 BalaCCodeFunction* _tmp75_;
18569 BalaCCodeFunction* _tmp76_;
18570 BalaCCodeFunctionCall* _tmp77_;
18571 _tmp41_ = bala_data_type_get_type_symbol (type);
18572 _tmp42_ = _tmp41_;
18573 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp42_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp42_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp42_) : NULL((void*)0);
18574 _tmp44_ = st;
18575 if (_tmp44_ != NULL((void*)0)) {
18576 BalaStruct* _tmp45_;
18577 _tmp45_ = st;
18578 _tmp43_ = bala_struct_is_disposable (_tmp45_);
18579 } else {
18580 _tmp43_ = FALSE(0);
18581 }
18582 if (_tmp43_) {
18583 BalaStruct* _tmp46_;
18584 BalaCCodeFunctionCall* destroy_call = NULL((void*)0);
18585 BalaStruct* _tmp48_;
18586 gchar* _tmp49_;
18587 gchar* _tmp50_;
18588 BalaCCodeIdentifier* _tmp51_;
18589 BalaCCodeIdentifier* _tmp52_;
18590 BalaCCodeFunctionCall* _tmp53_;
18591 BalaCCodeFunctionCall* _tmp54_;
18592 BalaCCodeFunctionCall* _tmp55_;
18593 BalaCCodeIdentifier* _tmp56_;
18594 BalaCCodeIdentifier* _tmp57_;
18595 BalaCCodeFunction* _tmp58_;
18596 BalaCCodeFunction* _tmp59_;
18597 BalaCCodeFunctionCall* _tmp60_;
18598 _tmp46_ = st;
18599 if (!bala_get_ccode_has_destroy_function (_tmp46_)) {
18600 BalaStruct* _tmp47_;
18601 _tmp47_ = st;
18602 bala_ccode_base_module_generate_struct_destroy_function (self, _tmp47_);
18603 }
18604 _tmp48_ = st;
18605 _tmp49_ = bala_get_ccode_destroy_function ((BalaTypeSymbol*) _tmp48_);
18606 _tmp50_ = _tmp49_;
18607 _tmp51_ = bala_ccode_identifier_new (_tmp50_);
18608 _tmp52_ = _tmp51_;
18609 _tmp53_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp52_);
18610 _tmp54_ = _tmp53_;
18611 _bala_ccode_node_unref0 (_tmp52_)((_tmp52_ == ((void*)0)) ? ((void*)0) : (_tmp52_ = (bala_ccode_node_unref
(_tmp52_), ((void*)0))))
;
18612 _g_free0 (_tmp50_)(_tmp50_ = (g_free (_tmp50_), ((void*)0)));
18613 destroy_call = _tmp54_;
18614 _tmp55_ = destroy_call;
18615 _tmp56_ = bala_ccode_identifier_new ("self");
18616 _tmp57_ = _tmp56_;
18617 bala_ccode_function_call_add_argument (_tmp55_, (BalaCCodeExpression*) _tmp57_);
18618 _bala_ccode_node_unref0 (_tmp57_)((_tmp57_ == ((void*)0)) ? ((void*)0) : (_tmp57_ = (bala_ccode_node_unref
(_tmp57_), ((void*)0))))
;
18619 _tmp58_ = bala_ccode_base_module_get_ccode (self);
18620 _tmp59_ = _tmp58_;
18621 _tmp60_ = destroy_call;
18622 bala_ccode_function_add_expression (_tmp59_, (BalaCCodeExpression*) _tmp60_);
18623 _bala_ccode_node_unref0 (destroy_call)((destroy_call == ((void*)0)) ? ((void*)0) : (destroy_call = (
bala_ccode_node_unref (destroy_call), ((void*)0))))
;
18624 }
18625 _tmp61_ = self->priv->_context;
18626 _tmp62_ = bala_code_context_get_profile (_tmp61_);
18627 _tmp63_ = _tmp62_;
18628 if (_tmp63_ == BALA_PROFILE_POSIX) {
18629 BalaCCodeFile* _tmp64_;
18630 BalaCCodeIdentifier* _tmp65_;
18631 BalaCCodeIdentifier* _tmp66_;
18632 BalaCCodeFunctionCall* _tmp67_;
18633 _tmp64_ = self->cfile;
18634 bala_ccode_file_add_include (_tmp64_, "stdlib.h", FALSE(0));
18635 _tmp65_ = bala_ccode_identifier_new ("free");
18636 _tmp66_ = _tmp65_;
18637 _tmp67_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp66_);
18638 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
18639 free_call = _tmp67_;
18640 _bala_ccode_node_unref0 (_tmp66_)((_tmp66_ == ((void*)0)) ? ((void*)0) : (_tmp66_ = (bala_ccode_node_unref
(_tmp66_), ((void*)0))))
;
18641 } else {
18642 BalaCCodeFile* _tmp68_;
18643 BalaCCodeIdentifier* _tmp69_;
18644 BalaCCodeIdentifier* _tmp70_;
18645 BalaCCodeFunctionCall* _tmp71_;
18646 _tmp68_ = self->cfile;
18647 bala_ccode_file_add_include (_tmp68_, "glib.h", FALSE(0));
18648 _tmp69_ = bala_ccode_identifier_new ("g_free");
18649 _tmp70_ = _tmp69_;
18650 _tmp71_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp70_);
18651 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
18652 free_call = _tmp71_;
18653 _bala_ccode_node_unref0 (_tmp70_)((_tmp70_ == ((void*)0)) ? ((void*)0) : (_tmp70_ = (bala_ccode_node_unref
(_tmp70_), ((void*)0))))
;
18654 }
18655 _tmp72_ = free_call;
18656 _tmp73_ = bala_ccode_identifier_new ("self");
18657 _tmp74_ = _tmp73_;
18658 bala_ccode_function_call_add_argument (_tmp72_, (BalaCCodeExpression*) _tmp74_);
18659 _bala_ccode_node_unref0 (_tmp74_)((_tmp74_ == ((void*)0)) ? ((void*)0) : (_tmp74_ = (bala_ccode_node_unref
(_tmp74_), ((void*)0))))
;
18660 _tmp75_ = bala_ccode_base_module_get_ccode (self);
18661 _tmp76_ = _tmp75_;
18662 _tmp77_ = free_call;
18663 bala_ccode_function_add_expression (_tmp76_, (BalaCCodeExpression*) _tmp77_);
18664 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
18665 }
18666 bala_ccode_base_module_pop_function (self);
18667 _tmp78_ = self->cfile;
18668 _tmp79_ = function;
18669 bala_ccode_file_add_function_declaration (_tmp78_, _tmp79_);
18670 _tmp80_ = self->cfile;
18671 _tmp81_ = function;
18672 bala_ccode_file_add_function (_tmp80_, _tmp81_);
18673 result = destroy_func;
18674 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
18675 return result;
18676}
18677
18678BalaCCodeExpression*
18679bala_ccode_base_module_get_destroy0_func_expression (BalaCCodeBaseModule* self,
18680 BalaDataType* type,
18681 gboolean is_chainup)
18682{
18683 BalaCCodeExpression* element_destroy_func_expression = NULL((void*)0);
18684 BalaCCodeExpression* _tmp0_;
18685 gboolean _tmp1_ = FALSE(0);
18686 BalaCCodeExpression* result = NULL((void*)0);
18687 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
18688 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
18689 _tmp0_ = bala_ccode_base_module_get_destroy_func_expression (self, type, is_chainup);
18690 element_destroy_func_expression = _tmp0_;
18691 if (!G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
18692 BalaCCodeExpression* _tmp2_;
18693 _tmp2_ = element_destroy_func_expression;
18694 _tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp2_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp2_); GType __t = ((bala_ccode_identifier_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
18695 } else {
18696 _tmp1_ = FALSE(0);
18697 }
18698 if (_tmp1_) {
18699 BalaCCodeIdentifier* freeid = NULL((void*)0);
18700 BalaCCodeExpression* _tmp3_;
18701 BalaCCodeIdentifier* _tmp4_;
18702 gchar* free0_func = NULL((void*)0);
18703 BalaCCodeIdentifier* _tmp5_;
18704 const gchar* _tmp6_;
18705 const gchar* _tmp7_;
18706 gchar* _tmp8_;
18707 const gchar* _tmp9_;
18708 const gchar* _tmp32_;
18709 BalaCCodeIdentifier* _tmp33_;
18710 _tmp3_ = element_destroy_func_expression;
18711 _tmp4_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp3_, BALA_TYPE_CCODE_IDENTIFIER, BalaCCodeIdentifier)(((BalaCCodeIdentifier*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp3_), ((bala_ccode_identifier_get_type ())))))
);
18712 freeid = _tmp4_;
18713 _tmp5_ = freeid;
18714 _tmp6_ = bala_ccode_identifier_get_name (_tmp5_);
18715 _tmp7_ = _tmp6_;
18716 _tmp8_ = g_strdup_printf ("_%s0_", _tmp7_);
18717 free0_func = _tmp8_;
18718 _tmp9_ = free0_func;
18719 if (bala_ccode_base_module_add_wrapper (self, _tmp9_)) {
18720 BalaCCodeFunction* function = NULL((void*)0);
18721 const gchar* _tmp10_;
18722 BalaCCodeFunction* _tmp11_;
18723 BalaCCodeFunction* _tmp12_;
18724 BalaCCodeFunction* _tmp13_;
18725 BalaDataType* _tmp14_;
18726 gchar* _tmp15_;
18727 gchar* _tmp16_;
18728 BalaCCodeParameter* _tmp17_;
18729 BalaCCodeParameter* _tmp18_;
18730 BalaCCodeFunction* _tmp19_;
18731 BalaCCodeFunction* _tmp20_;
18732 BalaCCodeFunction* _tmp21_;
18733 BalaCCodeIdentifier* _tmp22_;
18734 BalaCCodeIdentifier* _tmp23_;
18735 BalaGLibValue* _tmp24_;
18736 BalaGLibValue* _tmp25_;
18737 BalaCCodeExpression* _tmp26_;
18738 BalaCCodeExpression* _tmp27_;
18739 BalaCCodeFile* _tmp28_;
18740 BalaCCodeFunction* _tmp29_;
18741 BalaCCodeFile* _tmp30_;
18742 BalaCCodeFunction* _tmp31_;
18743 _tmp10_ = free0_func;
18744 _tmp11_ = bala_ccode_function_new (_tmp10_, "void");
18745 function = _tmp11_;
18746 _tmp12_ = function;
18747 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp12_, BALA_CCODE_MODIFIERS_STATIC);
18748 _tmp13_ = function;
18749 _tmp14_ = self->pointer_type;
18750 _tmp15_ = bala_get_ccode_name ((BalaCodeNode*) _tmp14_);
18751 _tmp16_ = _tmp15_;
18752 _tmp17_ = bala_ccode_parameter_new ("var", _tmp16_);
18753 _tmp18_ = _tmp17_;
18754 bala_ccode_function_add_parameter (_tmp13_, _tmp18_);
18755 _bala_ccode_node_unref0 (_tmp18_)((_tmp18_ == ((void*)0)) ? ((void*)0) : (_tmp18_ = (bala_ccode_node_unref
(_tmp18_), ((void*)0))))
;
18756 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
18757 _tmp19_ = function;
18758 bala_ccode_base_module_push_function (self, _tmp19_);
18759 _tmp20_ = bala_ccode_base_module_get_ccode (self);
18760 _tmp21_ = _tmp20_;
18761 _tmp22_ = bala_ccode_identifier_new ("var");
18762 _tmp23_ = _tmp22_;
18763 _tmp24_ = bala_glib_value_new (type, (BalaCCodeExpression*) _tmp23_, TRUE(!(0)));
18764 _tmp25_ = _tmp24_;
18765 _tmp26_ = bala_ccode_base_module_destroy_value (self, (BalaTargetValue*) _tmp25_, TRUE(!(0)));
18766 _tmp27_ = _tmp26_;
18767 bala_ccode_function_add_expression (_tmp21_, _tmp27_);
18768 _bala_ccode_node_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_ccode_node_unref
(_tmp27_), ((void*)0))))
;
18769 _bala_target_value_unref0 (_tmp25_)((_tmp25_ == ((void*)0)) ? ((void*)0) : (_tmp25_ = (bala_target_value_unref
(_tmp25_), ((void*)0))))
;
18770 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
18771 bala_ccode_base_module_pop_function (self);
18772 _tmp28_ = self->cfile;
18773 _tmp29_ = function;
18774 bala_ccode_file_add_function_declaration (_tmp28_, _tmp29_);
18775 _tmp30_ = self->cfile;
18776 _tmp31_ = function;
18777 bala_ccode_file_add_function (_tmp30_, _tmp31_);
18778 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
18779 }
18780 _tmp32_ = free0_func;
18781 _tmp33_ = bala_ccode_identifier_new (_tmp32_);
18782 _bala_ccode_node_unref0 (element_destroy_func_expression)((element_destroy_func_expression == ((void*)0)) ? ((void*)0)
: (element_destroy_func_expression = (bala_ccode_node_unref (
element_destroy_func_expression), ((void*)0))))
;
18783 element_destroy_func_expression = (BalaCCodeExpression*) _tmp33_;
18784 _g_free0 (free0_func)(free0_func = (g_free (free0_func), ((void*)0)));
18785 _bala_ccode_node_unref0 (freeid)((freeid == ((void*)0)) ? ((void*)0) : (freeid = (bala_ccode_node_unref
(freeid), ((void*)0))))
;
18786 }
18787 result = element_destroy_func_expression;
18788 return result;
18789}
18790
18791BalaCCodeExpression*
18792bala_ccode_base_module_get_destroy_func_expression (BalaCCodeBaseModule* self,
18793 BalaDataType* type,
18794 gboolean is_chainup)
18795{
18796 gboolean _tmp0_ = FALSE(0);
18797 BalaCodeContext* _tmp1_;
18798 BalaProfile _tmp2_;
18799 BalaProfile _tmp3_;
18800 BalaCCodeExpression* result = NULL((void*)0);
18801 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
18802 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
18803 _tmp1_ = self->priv->_context;
18804 _tmp2_ = bala_code_context_get_profile (_tmp1_);
18805 _tmp3_ = _tmp2_;
18806 if (_tmp3_ == BALA_PROFILE_GOBJECT) {
18807 gboolean _tmp4_ = FALSE(0);
18808 gboolean _tmp5_ = FALSE(0);
18809 gboolean _tmp6_ = FALSE(0);
18810 BalaTypeSymbol* _tmp7_;
18811 BalaTypeSymbol* _tmp8_;
18812 BalaClass* _tmp9_;
18813 _tmp7_ = bala_data_type_get_type_symbol (type);
18814 _tmp8_ = _tmp7_;
18815 _tmp9_ = self->glist_type;
18816 if (_tmp8_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp9_), ((bala_typesymbol_get_type ())))))
) {
18817 _tmp6_ = TRUE(!(0));
18818 } else {
18819 BalaTypeSymbol* _tmp10_;
18820 BalaTypeSymbol* _tmp11_;
18821 BalaClass* _tmp12_;
18822 _tmp10_ = bala_data_type_get_type_symbol (type);
18823 _tmp11_ = _tmp10_;
18824 _tmp12_ = self->gslist_type;
18825 _tmp6_ = _tmp11_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp12_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp12_), ((bala_typesymbol_get_type ())))))
;
18826 }
18827 if (_tmp6_) {
18828 _tmp5_ = TRUE(!(0));
18829 } else {
18830 BalaTypeSymbol* _tmp13_;
18831 BalaTypeSymbol* _tmp14_;
18832 BalaClass* _tmp15_;
18833 _tmp13_ = bala_data_type_get_type_symbol (type);
18834 _tmp14_ = _tmp13_;
18835 _tmp15_ = self->gnode_type;
18836 _tmp5_ = _tmp14_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp15_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp15_), ((bala_typesymbol_get_type ())))))
;
18837 }
18838 if (_tmp5_) {
18839 _tmp4_ = TRUE(!(0));
18840 } else {
18841 BalaTypeSymbol* _tmp16_;
18842 BalaTypeSymbol* _tmp17_;
18843 BalaClass* _tmp18_;
18844 _tmp16_ = bala_data_type_get_type_symbol (type);
18845 _tmp17_ = _tmp16_;
18846 _tmp18_ = self->gqueue_type;
18847 _tmp4_ = _tmp17_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp18_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp18_), ((bala_typesymbol_get_type ())))))
;
18848 }
18849 _tmp0_ = _tmp4_;
18850 } else {
18851 _tmp0_ = FALSE(0);
18852 }
18853 if (_tmp0_) {
18854 gboolean elements_require_free = FALSE(0);
18855 gboolean generic_elements = FALSE(0);
18856 BalaCCodeExpression* element_destroy_func_expression = NULL((void*)0);
18857 elements_require_free = FALSE(0);
18858 generic_elements = FALSE(0);
18859 element_destroy_func_expression = NULL((void*)0);
18860 {
18861 BalaList* _type_arg_list = NULL((void*)0);
18862 BalaList* _tmp19_;
18863 BalaList* _tmp20_;
18864 gint _type_arg_size = 0;
18865 BalaList* _tmp21_;
18866 gint _tmp22_;
18867 gint _tmp23_;
18868 gint _type_arg_index = 0;
18869 _tmp19_ = bala_data_type_get_type_arguments (type);
18870 _tmp20_ = _bala_iterable_ref0 (_tmp19_);
18871 _type_arg_list = _tmp20_;
18872 _tmp21_ = _type_arg_list;
18873 _tmp22_ = bala_collection_get_size ((BalaCollection*) _tmp21_);
18874 _tmp23_ = _tmp22_;
18875 _type_arg_size = _tmp23_;
18876 _type_arg_index = -1;
18877 while (TRUE(!(0))) {
18878 gint _tmp24_;
18879 gint _tmp25_;
18880 BalaDataType* type_arg = NULL((void*)0);
18881 BalaList* _tmp26_;
18882 gpointer _tmp27_;
18883 BalaDataType* _tmp28_;
18884 _type_arg_index = _type_arg_index + 1;
18885 _tmp24_ = _type_arg_index;
18886 _tmp25_ = _type_arg_size;
18887 if (!(_tmp24_ < _tmp25_)) {
18888 break;
18889 }
18890 _tmp26_ = _type_arg_list;
18891 _tmp27_ = bala_list_get (_tmp26_, _type_arg_index);
18892 type_arg = (BalaDataType*) _tmp27_;
18893 _tmp28_ = type_arg;
18894 elements_require_free = bala_ccode_base_module_requires_destroy (_tmp28_);
18895 if (elements_require_free) {
18896 BalaDataType* _tmp29_;
18897 BalaCCodeExpression* _tmp30_;
18898 BalaDataType* _tmp31_;
18899 _tmp29_ = type_arg;
18900 _tmp30_ = bala_ccode_base_module_get_destroy0_func_expression (self, _tmp29_, FALSE(0));
18901 _bala_ccode_node_unref0 (element_destroy_func_expression)((element_destroy_func_expression == ((void*)0)) ? ((void*)0)
: (element_destroy_func_expression = (bala_ccode_node_unref (
element_destroy_func_expression), ((void*)0))))
;
18902 element_destroy_func_expression = _tmp30_;
18903 _tmp31_ = type_arg;
18904 generic_elements = G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp31_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
18905 }
18906 _bala_code_node_unref0 (type_arg)((type_arg == ((void*)0)) ? ((void*)0) : (type_arg = (bala_code_node_unref
(type_arg), ((void*)0))))
;
18907 }
18908 _bala_iterable_unref0 (_type_arg_list)((_type_arg_list == ((void*)0)) ? ((void*)0) : (_type_arg_list
= (bala_iterable_unref (_type_arg_list), ((void*)0))))
;
18909 }
18910 if (elements_require_free) {
18911 BalaCCodeExpression* cexpr = NULL((void*)0);
18912 gboolean _tmp32_ = FALSE(0);
18913 BalaCCodeExpression* _tmp33_;
18914 cexpr = NULL((void*)0);
18915 _tmp33_ = element_destroy_func_expression;
18916 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp33_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp33_); GType __t = ((bala_ccode_identifier_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
18917 _tmp32_ = TRUE(!(0));
18918 } else {
18919 BalaCCodeExpression* _tmp34_;
18920 _tmp34_ = element_destroy_func_expression;
18921 _tmp32_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp34_, BALA_TYPE_CCODE_MEMBER_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp34_); GType __t = ((bala_ccode_member_access_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
;
18922 }
18923 if (_tmp32_) {
18924 BalaCCodeIdentifier* _tmp35_ = NULL((void*)0);
18925 gchar* _tmp37_;
18926 gchar* _tmp38_;
18927 BalaCCodeIdentifier* _tmp39_;
18928 if (generic_elements) {
18929 _tmp35_ = NULL((void*)0);
18930 } else {
18931 BalaCCodeExpression* _tmp36_;
18932 _tmp36_ = element_destroy_func_expression;
18933 _tmp35_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp36_); GType __t = ((bala_ccode_identifier_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaCCodeIdentifier*) _tmp36_) : NULL((void*)0);
18934 }
18935 _tmp37_ = bala_ccode_base_module_generate_collection_free_wrapper (self, type, _tmp35_);
18936 _tmp38_ = _tmp37_;
18937 _tmp39_ = bala_ccode_identifier_new (_tmp38_);
18938 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
18939 cexpr = (BalaCCodeExpression*) _tmp39_;
18940 _g_free0 (_tmp38_)(_tmp38_ = (g_free (_tmp38_), ((void*)0)));
18941 if (generic_elements) {
18942 BalaCCodeExpression* _tmp40_;
18943 BalaCCodeFunctionCall* _tmp41_;
18944 BalaCCodeExpression* _tmp42_;
18945 BalaCCodeExpression* _tmp43_;
18946 _tmp40_ = cexpr;
18947 _tmp41_ = bala_ccode_function_call_new (_tmp40_);
18948 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
18949 cexpr = (BalaCCodeExpression*) _tmp41_;
18950 _tmp42_ = cexpr;
18951 _tmp43_ = element_destroy_func_expression;
18952 bala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, BALA_TYPE_CCODE_FUNCTION_CALL, BalaCCodeFunctionCall)(((BalaCCodeFunctionCall*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp42_), ((bala_ccode_function_call_get_type ())))))
, _tmp43_);
18953 }
18954 } else {
18955 bala_report_error (NULL((void*)0), "internal error: No useable element_destroy_function found");
18956 }
18957 result = cexpr;
18958 _bala_ccode_node_unref0 (element_destroy_func_expression)((element_destroy_func_expression == ((void*)0)) ? ((void*)0)
: (element_destroy_func_expression = (bala_ccode_node_unref (
element_destroy_func_expression), ((void*)0))))
;
18959 return result;
18960 } else {
18961 BalaTypeSymbol* _tmp44_;
18962 BalaTypeSymbol* _tmp45_;
18963 gchar* _tmp46_;
18964 gchar* _tmp47_;
18965 BalaCCodeIdentifier* _tmp48_;
18966 BalaCCodeExpression* _tmp49_;
18967 _tmp44_ = bala_data_type_get_type_symbol (type);
18968 _tmp45_ = _tmp44_;
18969 _tmp46_ = bala_get_ccode_free_function (_tmp45_);
18970 _tmp47_ = _tmp46_;
18971 _tmp48_ = bala_ccode_identifier_new (_tmp47_);
18972 _tmp49_ = (BalaCCodeExpression*) _tmp48_;
18973 _g_free0 (_tmp47_)(_tmp47_ = (g_free (_tmp47_), ((void*)0)));
18974 result = _tmp49_;
18975 _bala_ccode_node_unref0 (element_destroy_func_expression)((element_destroy_func_expression == ((void*)0)) ? ((void*)0)
: (element_destroy_func_expression = (bala_ccode_node_unref (
element_destroy_func_expression), ((void*)0))))
;
18976 return result;
18977 }
18978 _bala_ccode_node_unref0 (element_destroy_func_expression)((element_destroy_func_expression == ((void*)0)) ? ((void*)0)
: (element_destroy_func_expression = (bala_ccode_node_unref (
element_destroy_func_expression), ((void*)0))))
;
18979 } else {
18980 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ERROR_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_error_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
18981 BalaCCodeFile* _tmp50_;
18982 BalaCCodeIdentifier* _tmp51_;
18983 _tmp50_ = self->cfile;
18984 bala_ccode_file_add_include (_tmp50_, "glib.h", FALSE(0));
18985 _tmp51_ = bala_ccode_identifier_new ("g_error_free");
18986 result = (BalaCCodeExpression*) _tmp51_;
18987 return result;
18988 } else {
18989 BalaTypeSymbol* _tmp52_;
18990 BalaTypeSymbol* _tmp53_;
18991 _tmp52_ = bala_data_type_get_type_symbol (type);
18992 _tmp53_ = _tmp52_;
18993 if (_tmp53_ != NULL((void*)0)) {
18994 gchar* unref_function = NULL((void*)0);
18995 const gchar* _tmp109_;
18996 const gchar* _tmp111_;
18997 BalaCCodeIdentifier* _tmp112_;
18998 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_REFERENCE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_reference_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
18999 BalaTypeSymbol* _tmp54_;
19000 BalaTypeSymbol* _tmp55_;
19001 _tmp54_ = bala_data_type_get_type_symbol (type);
19002 _tmp55_ = _tmp54_;
19003 if (bala_is_reference_counting (_tmp55_)) {
19004 BalaTypeSymbol* _tmp56_;
19005 BalaTypeSymbol* _tmp57_;
19006 gchar* _tmp58_;
19007 gboolean _tmp59_ = FALSE(0);
19008 BalaTypeSymbol* _tmp60_;
19009 BalaTypeSymbol* _tmp61_;
19010 _tmp56_ = bala_data_type_get_type_symbol (type);
19011 _tmp57_ = _tmp56_;
19012 _tmp58_ = bala_get_ccode_unref_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, BALA_TYPE_OBJECT_TYPE_SYMBOL, BalaObjectTypeSymbol)(((BalaObjectTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp57_), ((bala_object_type_symbol_get_type ())))))
);
19013 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19014 unref_function = _tmp58_;
19015 _tmp60_ = bala_data_type_get_type_symbol (type);
19016 _tmp61_ = _tmp60_;
19017 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp61_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp61_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
19018 const gchar* _tmp62_;
19019 _tmp62_ = unref_function;
19020 _tmp59_ = _tmp62_ == NULL((void*)0);
19021 } else {
19022 _tmp59_ = FALSE(0);
19023 }
19024 if (_tmp59_) {
19025 BalaSourceReference* _tmp63_;
19026 BalaSourceReference* _tmp64_;
19027 BalaTypeSymbol* _tmp65_;
19028 BalaTypeSymbol* _tmp66_;
19029 gchar* _tmp67_;
19030 gchar* _tmp68_;
19031 gchar* _tmp69_;
19032 gchar* _tmp70_;
19033 _tmp63_ = bala_code_node_get_source_reference ((BalaCodeNode*) type);
19034 _tmp64_ = _tmp63_;
19035 _tmp65_ = bala_data_type_get_type_symbol (type);
19036 _tmp66_ = _tmp65_;
19037 _tmp67_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp66_);
19038 _tmp68_ = _tmp67_;
19039 _tmp69_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
19040"rface declaration if unsure", _tmp68_);
19041 _tmp70_ = _tmp69_;
19042 bala_report_error (_tmp64_, _tmp70_);
19043 _g_free0 (_tmp70_)(_tmp70_ = (g_free (_tmp70_), ((void*)0)));
19044 _g_free0 (_tmp68_)(_tmp68_ = (g_free (_tmp68_), ((void*)0)));
19045 result = NULL((void*)0);
19046 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19047 return result;
19048 }
19049 } else {
19050 BalaTypeSymbol* _tmp71_;
19051 BalaTypeSymbol* _tmp72_;
19052 _tmp71_ = bala_data_type_get_type_symbol (type);
19053 _tmp72_ = _tmp71_;
19054 if (bala_get_ccode_is_gboxed (_tmp72_)) {
19055 gchar* _tmp73_;
19056 _tmp73_ = bala_ccode_base_module_generate_free_func_wrapper (self, type);
19057 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19058 unref_function = _tmp73_;
19059 } else {
19060 if (bala_is_free_function_address_of (type)) {
19061 gchar* _tmp74_;
19062 _tmp74_ = bala_ccode_base_module_generate_free_function_address_of_wrapper (self, type);
19063 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19064 unref_function = _tmp74_;
19065 } else {
19066 BalaTypeSymbol* _tmp75_;
19067 BalaTypeSymbol* _tmp76_;
19068 gchar* _tmp77_;
19069 _tmp75_ = bala_data_type_get_type_symbol (type);
19070 _tmp76_ = _tmp75_;
19071 _tmp77_ = bala_get_ccode_free_function (_tmp76_);
19072 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19073 unref_function = _tmp77_;
19074 }
19075 }
19076 }
19077 } else {
19078 gboolean _tmp78_;
19079 gboolean _tmp79_;
19080 _tmp78_ = bala_data_type_get_nullable (type);
19081 _tmp79_ = _tmp78_;
19082 if (_tmp79_) {
19083 BalaTypeSymbol* _tmp80_;
19084 BalaTypeSymbol* _tmp81_;
19085 const gchar* _tmp86_;
19086 _tmp80_ = bala_data_type_get_type_symbol (type);
19087 _tmp81_ = _tmp80_;
19088 if (bala_get_ccode_is_gboxed (_tmp81_)) {
19089 gchar* _tmp82_;
19090 _tmp82_ = bala_ccode_base_module_generate_free_func_wrapper (self, type);
19091 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19092 unref_function = _tmp82_;
19093 } else {
19094 BalaTypeSymbol* _tmp83_;
19095 BalaTypeSymbol* _tmp84_;
19096 gchar* _tmp85_;
19097 _tmp83_ = bala_data_type_get_type_symbol (type);
19098 _tmp84_ = _tmp83_;
19099 _tmp85_ = bala_get_ccode_free_function (_tmp84_);
19100 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19101 unref_function = _tmp85_;
19102 }
19103 _tmp86_ = unref_function;
19104 if (_tmp86_ == NULL((void*)0)) {
19105 gboolean _tmp87_ = FALSE(0);
19106 BalaTypeSymbol* _tmp88_;
19107 BalaTypeSymbol* _tmp89_;
19108 _tmp88_ = bala_data_type_get_type_symbol (type);
19109 _tmp89_ = _tmp88_;
19110 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp89_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp89_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
19111 BalaTypeSymbol* _tmp90_;
19112 BalaTypeSymbol* _tmp91_;
19113 _tmp90_ = bala_data_type_get_type_symbol (type);
19114 _tmp91_ = _tmp90_;
19115 _tmp87_ = bala_struct_is_disposable (G_TYPE_CHECK_INSTANCE_CAST (_tmp91_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp91_), ((bala_struct_get_type ())))))
);
19116 } else {
19117 _tmp87_ = FALSE(0);
19118 }
19119 if (_tmp87_) {
19120 gchar* _tmp92_;
19121 _tmp92_ = bala_ccode_base_module_generate_free_func_wrapper (self, type);
19122 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19123 unref_function = _tmp92_;
19124 } else {
19125 BalaCodeContext* _tmp93_;
19126 BalaProfile _tmp94_;
19127 BalaProfile _tmp95_;
19128 _tmp93_ = self->priv->_context;
19129 _tmp94_ = bala_code_context_get_profile (_tmp93_);
19130 _tmp95_ = _tmp94_;
19131 if (_tmp95_ == BALA_PROFILE_POSIX) {
19132 BalaCCodeFile* _tmp96_;
19133 gchar* _tmp97_;
19134 _tmp96_ = self->cfile;
19135 bala_ccode_file_add_include (_tmp96_, "stdlib.h", FALSE(0));
19136 _tmp97_ = g_strdup ("free");
19137 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19138 unref_function = _tmp97_;
19139 } else {
19140 BalaCCodeFile* _tmp98_;
19141 gchar* _tmp99_;
19142 _tmp98_ = self->cfile;
19143 bala_ccode_file_add_include (_tmp98_, "glib.h", FALSE(0));
19144 _tmp99_ = g_strdup ("g_free");
19145 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19146 unref_function = _tmp99_;
19147 }
19148 }
19149 }
19150 } else {
19151 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ENUM_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_enum_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
19152 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19153 unref_function = NULL((void*)0);
19154 } else {
19155 BalaStruct* st = NULL((void*)0);
19156 BalaTypeSymbol* _tmp100_;
19157 BalaTypeSymbol* _tmp101_;
19158 gboolean _tmp102_ = FALSE(0);
19159 BalaStruct* _tmp103_;
19160 _tmp100_ = bala_data_type_get_type_symbol (type);
19161 _tmp101_ = _tmp100_;
19162 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp101_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp101_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp101_) : NULL((void*)0);
19163 _tmp103_ = st;
19164 if (_tmp103_ != NULL((void*)0)) {
19165 BalaStruct* _tmp104_;
19166 _tmp104_ = st;
19167 _tmp102_ = bala_struct_is_disposable (_tmp104_);
19168 } else {
19169 _tmp102_ = FALSE(0);
19170 }
19171 if (_tmp102_) {
19172 BalaStruct* _tmp105_;
19173 BalaStruct* _tmp107_;
19174 gchar* _tmp108_;
19175 _tmp105_ = st;
19176 if (!bala_get_ccode_has_destroy_function (_tmp105_)) {
19177 BalaStruct* _tmp106_;
19178 _tmp106_ = st;
19179 bala_ccode_base_module_generate_struct_destroy_function (self, _tmp106_);
19180 }
19181 _tmp107_ = st;
19182 _tmp108_ = bala_get_ccode_destroy_function ((BalaTypeSymbol*) _tmp107_);
19183 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19184 unref_function = _tmp108_;
19185 } else {
19186 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19187 unref_function = NULL((void*)0);
19188 }
19189 }
19190 }
19191 }
19192 _tmp109_ = unref_function;
19193 if (_tmp109_ == NULL((void*)0)) {
19194 BalaCCodeConstant* _tmp110_;
19195 _tmp110_ = bala_ccode_constant_new ("NULL");
19196 result = (BalaCCodeExpression*) _tmp110_;
19197 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19198 return result;
19199 }
19200 _tmp111_ = unref_function;
19201 _tmp112_ = bala_ccode_identifier_new (_tmp111_);
19202 result = (BalaCCodeExpression*) _tmp112_;
19203 _g_free0 (unref_function)(unref_function = (g_free (unref_function), ((void*)0)));
19204 return result;
19205 } else {
19206 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
19207 BalaTypeParameter* type_parameter = NULL((void*)0);
19208 BalaTypeParameter* _tmp113_;
19209 BalaTypeParameter* _tmp114_;
19210 BalaTypeParameter* _tmp115_;
19211 gchar* func_name = NULL((void*)0);
19212 BalaTypeParameter* _tmp116_;
19213 const gchar* _tmp117_;
19214 const gchar* _tmp118_;
19215 gchar* _tmp119_;
19216 gchar* _tmp120_;
19217 gchar* _tmp121_;
19218 gchar* _tmp122_;
19219 BalaTypeParameter* _tmp123_;
19220 BalaSymbol* _tmp124_;
19221 BalaSymbol* _tmp125_;
19222 gboolean _tmp157_ = FALSE(0);
19223 gboolean _tmp158_ = FALSE(0);
19224 _tmp113_ = bala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
);
19225 _tmp114_ = _tmp113_;
19226 _tmp115_ = _bala_code_node_ref0 (_tmp114_);
19227 type_parameter = _tmp115_;
19228 _tmp116_ = type_parameter;
19229 _tmp117_ = bala_symbol_get_name ((BalaSymbol*) _tmp116_);
19230 _tmp118_ = _tmp117_;
19231 _tmp119_ = g_ascii_strdown (_tmp118_, (gssize) -1);
19232 _tmp120_ = _tmp119_;
19233 _tmp121_ = g_strdup_printf ("%s_destroy_func", _tmp120_);
19234 _tmp122_ = _tmp121_;
19235 _g_free0 (_tmp120_)(_tmp120_ = (g_free (_tmp120_), ((void*)0)));
19236 func_name = _tmp122_;
19237 _tmp123_ = type_parameter;
19238 _tmp124_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp123_);
19239 _tmp125_ = _tmp124_;
19240 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp125_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp125_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
19241 BalaInterface* iface = NULL((void*)0);
19242 BalaTypeParameter* _tmp126_;
19243 BalaSymbol* _tmp127_;
19244 BalaSymbol* _tmp128_;
19245 BalaInterface* _tmp129_;
19246 BalaInterface* _tmp130_;
19247 gchar* method_name = NULL((void*)0);
19248 BalaTypeParameter* _tmp131_;
19249 const gchar* _tmp132_;
19250 const gchar* _tmp133_;
19251 gchar* _tmp134_;
19252 gchar* _tmp135_;
19253 gchar* _tmp136_;
19254 gchar* _tmp137_;
19255 BalaCCodeFunctionCall* cast_self = NULL((void*)0);
19256 BalaInterface* _tmp138_;
19257 gchar* _tmp139_;
19258 gchar* _tmp140_;
19259 BalaCCodeIdentifier* _tmp141_;
19260 BalaCCodeIdentifier* _tmp142_;
19261 BalaCCodeFunctionCall* _tmp143_;
19262 BalaCCodeFunctionCall* _tmp144_;
19263 BalaCCodeFunctionCall* _tmp145_;
19264 BalaCCodeExpression* _tmp146_;
19265 BalaCCodeExpression* _tmp147_;
19266 BalaCCodeFunctionCall* function_call = NULL((void*)0);
19267 BalaCCodeFunctionCall* _tmp148_;
19268 const gchar* _tmp149_;
19269 BalaCCodeMemberAccess* _tmp150_;
19270 BalaCCodeMemberAccess* _tmp151_;
19271 BalaCCodeFunctionCall* _tmp152_;
19272 BalaCCodeFunctionCall* _tmp153_;
19273 BalaCCodeFunctionCall* _tmp154_;
19274 BalaCCodeExpression* _tmp155_;
19275 BalaCCodeExpression* _tmp156_;
19276 _tmp126_ = type_parameter;
19277 _tmp127_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp126_);
19278 _tmp128_ = _tmp127_;
19279 _tmp129_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp128_, BALA_TYPE_INTERFACE, BalaInterface)(((BalaInterface*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp128_), ((bala_interface_get_type ())))))
);
19280 iface = _tmp129_;
19281 _tmp130_ = iface;
19282 bala_ccode_base_module_require_generic_accessors (self, _tmp130_);
19283 _tmp131_ = type_parameter;
19284 _tmp132_ = bala_symbol_get_name ((BalaSymbol*) _tmp131_);
19285 _tmp133_ = _tmp132_;
19286 _tmp134_ = g_ascii_strdown (_tmp133_, (gssize) -1);
19287 _tmp135_ = _tmp134_;
19288 _tmp136_ = g_strdup_printf ("get_%s_destroy_func", _tmp135_);
19289 _tmp137_ = _tmp136_;
19290 _g_free0 (_tmp135_)(_tmp135_ = (g_free (_tmp135_), ((void*)0)));
19291 method_name = _tmp137_;
19292 _tmp138_ = iface;
19293 _tmp139_ = bala_get_ccode_type_get_function ((BalaObjectTypeSymbol*) _tmp138_);
19294 _tmp140_ = _tmp139_;
19295 _tmp141_ = bala_ccode_identifier_new (_tmp140_);
19296 _tmp142_ = _tmp141_;
19297 _tmp143_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp142_);
19298 _tmp144_ = _tmp143_;
19299 _bala_ccode_node_unref0 (_tmp142_)((_tmp142_ == ((void*)0)) ? ((void*)0) : (_tmp142_ = (bala_ccode_node_unref
(_tmp142_), ((void*)0))))
;
19300 _g_free0 (_tmp140_)(_tmp140_ = (g_free (_tmp140_), ((void*)0)));
19301 cast_self = _tmp144_;
19302 _tmp145_ = cast_self;
19303 _tmp146_ = bala_ccode_base_module_get_this_cexpression (self);
19304 _tmp147_ = _tmp146_;
19305 bala_ccode_function_call_add_argument (_tmp145_, _tmp147_);
19306 _bala_ccode_node_unref0 (_tmp147_)((_tmp147_ == ((void*)0)) ? ((void*)0) : (_tmp147_ = (bala_ccode_node_unref
(_tmp147_), ((void*)0))))
;
19307 _tmp148_ = cast_self;
19308 _tmp149_ = method_name;
19309 _tmp150_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp148_, _tmp149_);
19310 _tmp151_ = _tmp150_;
19311 _tmp152_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp151_);
19312 _tmp153_ = _tmp152_;
19313 _bala_ccode_node_unref0 (_tmp151_)((_tmp151_ == ((void*)0)) ? ((void*)0) : (_tmp151_ = (bala_ccode_node_unref
(_tmp151_), ((void*)0))))
;
19314 function_call = _tmp153_;
19315 _tmp154_ = function_call;
19316 _tmp155_ = bala_ccode_base_module_get_this_cexpression (self);
19317 _tmp156_ = _tmp155_;
19318 bala_ccode_function_call_add_argument (_tmp154_, _tmp156_);
19319 _bala_ccode_node_unref0 (_tmp156_)((_tmp156_ == ((void*)0)) ? ((void*)0) : (_tmp156_ = (bala_ccode_node_unref
(_tmp156_), ((void*)0))))
;
19320 result = (BalaCCodeExpression*) function_call;
19321 _bala_ccode_node_unref0 (cast_self)((cast_self == ((void*)0)) ? ((void*)0) : (cast_self = (bala_ccode_node_unref
(cast_self), ((void*)0))))
;
19322 _g_free0 (method_name)(method_name = (g_free (method_name), ((void*)0)));
19323 _bala_code_node_unref0 (iface)((iface == ((void*)0)) ? ((void*)0) : (iface = (bala_code_node_unref
(iface), ((void*)0))))
;
19324 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
19325 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
19326 return result;
19327 }
19328 if (bala_ccode_base_module_is_in_generic_type (self, G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
)) {
19329 _tmp158_ = !is_chainup;
19330 } else {
19331 _tmp158_ = FALSE(0);
19332 }
19333 if (_tmp158_) {
19334 gboolean _tmp159_;
19335 gboolean _tmp160_;
19336 _tmp159_ = bala_ccode_base_module_get_in_creation_method (self);
19337 _tmp160_ = _tmp159_;
19338 _tmp157_ = !_tmp160_;
19339 } else {
19340 _tmp157_ = FALSE(0);
19341 }
19342 if (_tmp157_) {
19343 BalaCCodeExpression* _tmp161_;
19344 BalaCCodeExpression* _tmp162_;
19345 BalaCCodeMemberAccess* _tmp163_;
19346 BalaCCodeMemberAccess* _tmp164_;
19347 const gchar* _tmp165_;
19348 BalaCCodeMemberAccess* _tmp166_;
19349 BalaCCodeExpression* _tmp167_;
19350 _tmp161_ = bala_ccode_base_module_get_this_cexpression (self);
19351 _tmp162_ = _tmp161_;
19352 _tmp163_ = bala_ccode_member_access_new_pointer (_tmp162_, "priv");
19353 _tmp164_ = _tmp163_;
19354 _tmp165_ = func_name;
19355 _tmp166_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp164_, _tmp165_);
19356 _tmp167_ = (BalaCCodeExpression*) _tmp166_;
19357 _bala_ccode_node_unref0 (_tmp164_)((_tmp164_ == ((void*)0)) ? ((void*)0) : (_tmp164_ = (bala_ccode_node_unref
(_tmp164_), ((void*)0))))
;
19358 _bala_ccode_node_unref0 (_tmp162_)((_tmp162_ == ((void*)0)) ? ((void*)0) : (_tmp162_ = (bala_ccode_node_unref
(_tmp162_), ((void*)0))))
;
19359 result = _tmp167_;
19360 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
19361 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
19362 return result;
19363 } else {
19364 const gchar* _tmp168_;
19365 BalaCCodeExpression* _tmp169_;
19366 _tmp168_ = func_name;
19367 _tmp169_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp168_);
19368 result = _tmp169_;
19369 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
19370 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
19371 return result;
19372 }
19373 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
19374 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
19375 } else {
19376 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_array_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
19377 BalaCodeContext* _tmp170_;
19378 BalaProfile _tmp171_;
19379 BalaProfile _tmp172_;
19380 _tmp170_ = self->priv->_context;
19381 _tmp171_ = bala_code_context_get_profile (_tmp170_);
19382 _tmp172_ = _tmp171_;
19383 if (_tmp172_ == BALA_PROFILE_POSIX) {
19384 BalaCCodeFile* _tmp173_;
19385 BalaCCodeIdentifier* _tmp174_;
19386 _tmp173_ = self->cfile;
19387 bala_ccode_file_add_include (_tmp173_, "stdlib.h", FALSE(0));
19388 _tmp174_ = bala_ccode_identifier_new ("free");
19389 result = (BalaCCodeExpression*) _tmp174_;
19390 return result;
19391 } else {
19392 BalaCCodeFile* _tmp175_;
19393 BalaCCodeIdentifier* _tmp176_;
19394 _tmp175_ = self->cfile;
19395 bala_ccode_file_add_include (_tmp175_, "glib.h", FALSE(0));
19396 _tmp176_ = bala_ccode_identifier_new ("g_free");
19397 result = (BalaCCodeExpression*) _tmp176_;
19398 return result;
19399 }
19400 } else {
19401 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
19402 BalaCodeContext* _tmp177_;
19403 BalaProfile _tmp178_;
19404 BalaProfile _tmp179_;
19405 _tmp177_ = self->priv->_context;
19406 _tmp178_ = bala_code_context_get_profile (_tmp177_);
19407 _tmp179_ = _tmp178_;
19408 if (_tmp179_ == BALA_PROFILE_POSIX) {
19409 BalaCCodeFile* _tmp180_;
19410 BalaCCodeIdentifier* _tmp181_;
19411 _tmp180_ = self->cfile;
19412 bala_ccode_file_add_include (_tmp180_, "stdlib.h", FALSE(0));
19413 _tmp181_ = bala_ccode_identifier_new ("free");
19414 result = (BalaCCodeExpression*) _tmp181_;
19415 return result;
19416 } else {
19417 BalaCCodeFile* _tmp182_;
19418 BalaCCodeIdentifier* _tmp183_;
19419 _tmp182_ = self->cfile;
19420 bala_ccode_file_add_include (_tmp182_, "glib.h", FALSE(0));
19421 _tmp183_ = bala_ccode_identifier_new ("g_free");
19422 result = (BalaCCodeExpression*) _tmp183_;
19423 return result;
19424 }
19425 } else {
19426 BalaCCodeConstant* _tmp184_;
19427 _tmp184_ = bala_ccode_constant_new ("NULL");
19428 result = (BalaCCodeExpression*) _tmp184_;
19429 return result;
19430 }
19431 }
19432 }
19433 }
19434 }
19435 }
19436}
19437
19438static gchar*
19439bala_ccode_base_module_generate_collection_free_wrapper (BalaCCodeBaseModule* self,
19440 BalaDataType* collection_type,
19441 BalaCCodeIdentifier* element_destroy_func_expression)
19442{
19443 gchar* destroy_func = NULL((void*)0);
19444 gchar* destroy_func_wrapper = NULL((void*)0);
19445 BalaTypeSymbol* _tmp8_;
19446 BalaTypeSymbol* _tmp9_;
19447 BalaClass* _tmp10_;
19448 gchar* result = NULL((void*)0);
19449 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
19450 g_return_val_if_fail (collection_type != NULL, NULL)do { if ((collection_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "collection_type != NULL"
); return (((void*)0)); } } while (0)
;
19451 destroy_func_wrapper = NULL((void*)0);
19452 if (element_destroy_func_expression != NULL((void*)0)) {
19453 BalaTypeSymbol* _tmp0_;
19454 BalaTypeSymbol* _tmp1_;
19455 gchar* _tmp2_;
19456 gchar* _tmp3_;
19457 const gchar* _tmp4_;
19458 const gchar* _tmp5_;
19459 gchar* _tmp6_;
19460 const gchar* _tmp7_;
19461 _tmp0_ = bala_data_type_get_type_symbol (collection_type);
19462 _tmp1_ = _tmp0_;
19463 _tmp2_ = bala_get_ccode_free_function (_tmp1_);
19464 _tmp3_ = _tmp2_;
19465 _tmp4_ = bala_ccode_identifier_get_name (element_destroy_func_expression);
19466 _tmp5_ = _tmp4_;
19467 _tmp6_ = g_strdup_printf ("_%s_%s", _tmp3_, _tmp5_);
19468 _g_free0 (destroy_func_wrapper)(destroy_func_wrapper = (g_free (destroy_func_wrapper), ((void
*)0)))
;
19469 destroy_func_wrapper = _tmp6_;
19470 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
19471 _tmp7_ = destroy_func_wrapper;
19472 if (!bala_ccode_base_module_add_wrapper (self, _tmp7_)) {
19473 result = destroy_func_wrapper;
19474 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
19475 return result;
19476 }
19477 }
19478 _tmp8_ = bala_data_type_get_type_symbol (collection_type);
19479 _tmp9_ = _tmp8_;
19480 _tmp10_ = self->gnode_type;
19481 if (_tmp9_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp10_), ((bala_typesymbol_get_type ())))))
) {
19482 gchar* _tmp11_;
19483 const gchar* _tmp12_;
19484 BalaCCodeFunction* function = NULL((void*)0);
19485 const gchar* _tmp13_;
19486 BalaCCodeFunction* _tmp14_;
19487 BalaCCodeFunction* _tmp15_;
19488 gchar* _tmp16_;
19489 gchar* _tmp17_;
19490 BalaCCodeParameter* _tmp18_;
19491 BalaCCodeParameter* _tmp19_;
19492 BalaCCodeFunction* _tmp20_;
19493 BalaCCodeParameter* _tmp21_;
19494 BalaCCodeParameter* _tmp22_;
19495 BalaCCodeFunction* _tmp23_;
19496 BalaCCodeFunctionCall* element_free_call = NULL((void*)0);
19497 gchar* destroy_node_func = NULL((void*)0);
19498 const gchar* _tmp24_;
19499 gchar* _tmp25_;
19500 BalaCCodeFunction* wrapper = NULL((void*)0);
19501 const gchar* _tmp26_;
19502 BalaDataType* _tmp27_;
19503 gchar* _tmp28_;
19504 gchar* _tmp29_;
19505 BalaCCodeFunction* _tmp30_;
19506 BalaCCodeFunction* _tmp31_;
19507 BalaCCodeFunction* _tmp32_;
19508 BalaCCodeFunction* _tmp33_;
19509 gchar* _tmp34_;
19510 gchar* _tmp35_;
19511 BalaCCodeParameter* _tmp36_;
19512 BalaCCodeParameter* _tmp37_;
19513 BalaCCodeFunction* _tmp38_;
19514 BalaCCodeParameter* _tmp39_;
19515 BalaCCodeParameter* _tmp40_;
19516 BalaCCodeFunction* _tmp41_;
19517 BalaCCodeFunctionCall* free_call = NULL((void*)0);
19518 BalaCCodeIdentifier* _tmp42_;
19519 BalaCCodeIdentifier* _tmp43_;
19520 BalaCCodeFunctionCall* _tmp44_;
19521 BalaCCodeFunctionCall* _tmp45_;
19522 BalaCCodeFunctionCall* _tmp46_;
19523 BalaCCodeIdentifier* _tmp47_;
19524 BalaCCodeIdentifier* _tmp48_;
19525 BalaCCodeMemberAccess* _tmp49_;
19526 BalaCCodeMemberAccess* _tmp50_;
19527 BalaCCodeBinaryExpression* data_isnull = NULL((void*)0);
19528 BalaCCodeIdentifier* _tmp51_;
19529 BalaCCodeIdentifier* _tmp52_;
19530 BalaCCodeMemberAccess* _tmp53_;
19531 BalaCCodeMemberAccess* _tmp54_;
19532 BalaCCodeConstant* _tmp55_;
19533 BalaCCodeConstant* _tmp56_;
19534 BalaCCodeBinaryExpression* _tmp57_;
19535 BalaCCodeBinaryExpression* _tmp58_;
19536 BalaCCodeCommaExpression* ccomma_data = NULL((void*)0);
19537 BalaCCodeCommaExpression* _tmp59_;
19538 BalaCCodeCommaExpression* _tmp60_;
19539 BalaCCodeBinaryExpression* _tmp61_;
19540 BalaCCodeConstant* _tmp62_;
19541 BalaCCodeConstant* _tmp63_;
19542 BalaCCodeFunctionCall* _tmp64_;
19543 BalaCCodeConditionalExpression* _tmp65_;
19544 BalaCCodeConditionalExpression* _tmp66_;
19545 BalaCCodeFunction* _tmp67_;
19546 BalaCCodeFunction* _tmp68_;
19547 BalaCCodeCommaExpression* _tmp69_;
19548 BalaCCodeFunction* _tmp70_;
19549 BalaCCodeFunction* _tmp71_;
19550 BalaCCodeConstant* _tmp72_;
19551 BalaCCodeConstant* _tmp73_;
19552 BalaCCodeFile* _tmp74_;
19553 BalaCCodeFunction* _tmp75_;
19554 BalaCCodeFile* _tmp76_;
19555 BalaCCodeFunction* _tmp77_;
19556 BalaCCodeIdentifier* _tmp78_;
19557 BalaCCodeIdentifier* _tmp79_;
19558 BalaCCodeFunctionCall* _tmp80_;
19559 BalaCCodeFunctionCall* _tmp81_;
19560 BalaCCodeIdentifier* _tmp82_;
19561 BalaCCodeIdentifier* _tmp83_;
19562 BalaCCodeFunctionCall* _tmp84_;
19563 BalaCCodeConstant* _tmp85_;
19564 BalaCCodeConstant* _tmp86_;
19565 BalaCCodeFunctionCall* _tmp87_;
19566 BalaCCodeConstant* _tmp88_;
19567 BalaCCodeConstant* _tmp89_;
19568 BalaCCodeFunctionCall* _tmp90_;
19569 BalaCCodeConstant* _tmp91_;
19570 BalaCCodeConstant* _tmp92_;
19571 BalaCCodeFunctionCall* _tmp93_;
19572 const gchar* _tmp94_;
19573 BalaCCodeIdentifier* _tmp95_;
19574 BalaCCodeIdentifier* _tmp96_;
19575 BalaCCodeCastExpression* _tmp97_;
19576 BalaCCodeCastExpression* _tmp98_;
19577 BalaCCodeFunctionCall* _tmp99_;
19578 BalaCCodeIdentifier* _tmp100_;
19579 BalaCCodeIdentifier* _tmp101_;
19580 BalaCCodeBinaryExpression* free_func_isnull = NULL((void*)0);
19581 BalaCCodeIdentifier* _tmp102_;
19582 BalaCCodeIdentifier* _tmp103_;
19583 BalaCCodeConstant* _tmp104_;
19584 BalaCCodeConstant* _tmp105_;
19585 BalaCCodeBinaryExpression* _tmp106_;
19586 BalaCCodeBinaryExpression* _tmp107_;
19587 BalaCCodeCommaExpression* ccomma = NULL((void*)0);
19588 BalaCCodeCommaExpression* _tmp108_;
19589 BalaCCodeCommaExpression* _tmp109_;
19590 BalaCCodeBinaryExpression* _tmp110_;
19591 BalaCCodeConstant* _tmp111_;
19592 BalaCCodeConstant* _tmp112_;
19593 BalaCCodeFunctionCall* _tmp113_;
19594 BalaCCodeConditionalExpression* _tmp114_;
19595 BalaCCodeConditionalExpression* _tmp115_;
19596 BalaCCodeFunction* _tmp116_;
19597 BalaCCodeFunction* _tmp117_;
19598 BalaCCodeCommaExpression* _tmp118_;
19599 BalaCCodeFunctionCall* cfreecall = NULL((void*)0);
19600 BalaClass* _tmp119_;
19601 gchar* _tmp120_;
19602 gchar* _tmp121_;
19603 BalaCCodeIdentifier* _tmp122_;
19604 BalaCCodeIdentifier* _tmp123_;
19605 BalaCCodeFunctionCall* _tmp124_;
19606 BalaCCodeFunctionCall* _tmp125_;
19607 BalaCCodeFunctionCall* _tmp126_;
19608 BalaCCodeIdentifier* _tmp127_;
19609 BalaCCodeIdentifier* _tmp128_;
19610 BalaCCodeFunction* _tmp129_;
19611 BalaCCodeFunction* _tmp130_;
19612 BalaCCodeFunctionCall* _tmp131_;
19613 BalaCCodeFunction* _tmp132_;
19614 BalaCCodeFile* _tmp133_;
19615 BalaCCodeFunction* _tmp134_;
19616 BalaCCodeFile* _tmp135_;
19617 BalaCCodeFunction* _tmp136_;
19618 _tmp11_ = g_strdup ("_g_node_free_all");
19619 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
19620 destroy_func = _tmp11_;
19621 _tmp12_ = destroy_func;
19622 if (!bala_ccode_base_module_add_wrapper (self, _tmp12_)) {
19623 result = destroy_func;
19624 _g_free0 (destroy_func_wrapper)(destroy_func_wrapper = (g_free (destroy_func_wrapper), ((void
*)0)))
;
19625 return result;
19626 }
19627 _tmp13_ = destroy_func;
19628 _tmp14_ = bala_ccode_function_new (_tmp13_, "void");
19629 function = _tmp14_;
19630 _tmp15_ = function;
19631 _tmp16_ = bala_get_ccode_name ((BalaCodeNode*) collection_type);
19632 _tmp17_ = _tmp16_;
19633 _tmp18_ = bala_ccode_parameter_new ("self", _tmp17_);
19634 _tmp19_ = _tmp18_;
19635 bala_ccode_function_add_parameter (_tmp15_, _tmp19_);
19636 _bala_ccode_node_unref0 (_tmp19_)((_tmp19_ == ((void*)0)) ? ((void*)0) : (_tmp19_ = (bala_ccode_node_unref
(_tmp19_), ((void*)0))))
;
19637 _g_free0 (_tmp17_)(_tmp17_ = (g_free (_tmp17_), ((void*)0)));
19638 _tmp20_ = function;
19639 _tmp21_ = bala_ccode_parameter_new ("free_func", "GDestroyNotify");
19640 _tmp22_ = _tmp21_;
19641 bala_ccode_function_add_parameter (_tmp20_, _tmp22_);
19642 _bala_ccode_node_unref0 (_tmp22_)((_tmp22_ == ((void*)0)) ? ((void*)0) : (_tmp22_ = (bala_ccode_node_unref
(_tmp22_), ((void*)0))))
;
19643 _tmp23_ = function;
19644 bala_ccode_base_module_push_function (self, _tmp23_);
19645 _tmp24_ = destroy_func;
19646 _tmp25_ = g_strdup_printf ("%s_node", _tmp24_);
19647 destroy_node_func = _tmp25_;
19648 _tmp26_ = destroy_node_func;
19649 _tmp27_ = self->bool_type;
19650 _tmp28_ = bala_get_ccode_name ((BalaCodeNode*) _tmp27_);
19651 _tmp29_ = _tmp28_;
19652 _tmp30_ = bala_ccode_function_new (_tmp26_, _tmp29_);
19653 _tmp31_ = _tmp30_;
19654 _g_free0 (_tmp29_)(_tmp29_ = (g_free (_tmp29_), ((void*)0)));
19655 wrapper = _tmp31_;
19656 _tmp32_ = wrapper;
19657 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp32_, BALA_CCODE_MODIFIERS_STATIC);
19658 _tmp33_ = wrapper;
19659 _tmp34_ = bala_get_ccode_name ((BalaCodeNode*) collection_type);
19660 _tmp35_ = _tmp34_;
19661 _tmp36_ = bala_ccode_parameter_new ("node", _tmp35_);
19662 _tmp37_ = _tmp36_;
19663 bala_ccode_function_add_parameter (_tmp33_, _tmp37_);
19664 _bala_ccode_node_unref0 (_tmp37_)((_tmp37_ == ((void*)0)) ? ((void*)0) : (_tmp37_ = (bala_ccode_node_unref
(_tmp37_), ((void*)0))))
;
19665 _g_free0 (_tmp35_)(_tmp35_ = (g_free (_tmp35_), ((void*)0)));
19666 _tmp38_ = wrapper;
19667 _tmp39_ = bala_ccode_parameter_new ("free_func", "GDestroyNotify");
19668 _tmp40_ = _tmp39_;
19669 bala_ccode_function_add_parameter (_tmp38_, _tmp40_);
19670 _bala_ccode_node_unref0 (_tmp40_)((_tmp40_ == ((void*)0)) ? ((void*)0) : (_tmp40_ = (bala_ccode_node_unref
(_tmp40_), ((void*)0))))
;
19671 _tmp41_ = wrapper;
19672 bala_ccode_base_module_push_function (self, _tmp41_);
19673 _tmp42_ = bala_ccode_identifier_new ("free_func");
19674 _tmp43_ = _tmp42_;
19675 _tmp44_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp43_);
19676 _tmp45_ = _tmp44_;
19677 _bala_ccode_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_ccode_node_unref
(_tmp43_), ((void*)0))))
;
19678 free_call = _tmp45_;
19679 _tmp46_ = free_call;
19680 _tmp47_ = bala_ccode_identifier_new ("node");
19681 _tmp48_ = _tmp47_;
19682 _tmp49_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp48_, "data");
19683 _tmp50_ = _tmp49_;
19684 bala_ccode_function_call_add_argument (_tmp46_, (BalaCCodeExpression*) _tmp50_);
19685 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
19686 _bala_ccode_node_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_ccode_node_unref
(_tmp48_), ((void*)0))))
;
19687 _tmp51_ = bala_ccode_identifier_new ("node");
19688 _tmp52_ = _tmp51_;
19689 _tmp53_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp52_, "data");
19690 _tmp54_ = _tmp53_;
19691 _tmp55_ = bala_ccode_constant_new ("NULL");
19692 _tmp56_ = _tmp55_;
19693 _tmp57_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp54_, (BalaCCodeExpression*) _tmp56_);
19694 _tmp58_ = _tmp57_;
19695 _bala_ccode_node_unref0 (_tmp56_)((_tmp56_ == ((void*)0)) ? ((void*)0) : (_tmp56_ = (bala_ccode_node_unref
(_tmp56_), ((void*)0))))
;
19696 _bala_ccode_node_unref0 (_tmp54_)((_tmp54_ == ((void*)0)) ? ((void*)0) : (_tmp54_ = (bala_ccode_node_unref
(_tmp54_), ((void*)0))))
;
19697 _bala_ccode_node_unref0 (_tmp52_)((_tmp52_ == ((void*)0)) ? ((void*)0) : (_tmp52_ = (bala_ccode_node_unref
(_tmp52_), ((void*)0))))
;
19698 data_isnull = _tmp58_;
19699 _tmp59_ = bala_ccode_comma_expression_new ();
19700 ccomma_data = _tmp59_;
19701 _tmp60_ = ccomma_data;
19702 _tmp61_ = data_isnull;
19703 _tmp62_ = bala_ccode_constant_new ("NULL");
19704 _tmp63_ = _tmp62_;
19705 _tmp64_ = free_call;
19706 _tmp65_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp61_, (BalaCCodeExpression*) _tmp63_, (BalaCCodeExpression*) _tmp64_);
19707 _tmp66_ = _tmp65_;
19708 bala_ccode_comma_expression_append_expression (_tmp60_, (BalaCCodeExpression*) _tmp66_);
19709 _bala_ccode_node_unref0 (_tmp66_)((_tmp66_ == ((void*)0)) ? ((void*)0) : (_tmp66_ = (bala_ccode_node_unref
(_tmp66_), ((void*)0))))
;
19710 _bala_ccode_node_unref0 (_tmp63_)((_tmp63_ == ((void*)0)) ? ((void*)0) : (_tmp63_ = (bala_ccode_node_unref
(_tmp63_), ((void*)0))))
;
19711 _tmp67_ = bala_ccode_base_module_get_ccode (self);
19712 _tmp68_ = _tmp67_;
19713 _tmp69_ = ccomma_data;
19714 bala_ccode_function_add_expression (_tmp68_, (BalaCCodeExpression*) _tmp69_);
19715 _tmp70_ = bala_ccode_base_module_get_ccode (self);
19716 _tmp71_ = _tmp70_;
19717 _tmp72_ = bala_ccode_constant_new ("FALSE");
19718 _tmp73_ = _tmp72_;
19719 bala_ccode_function_add_return (_tmp71_, (BalaCCodeExpression*) _tmp73_);
19720 _bala_ccode_node_unref0 (_tmp73_)((_tmp73_ == ((void*)0)) ? ((void*)0) : (_tmp73_ = (bala_ccode_node_unref
(_tmp73_), ((void*)0))))
;
19721 bala_ccode_base_module_pop_function (self);
19722 _tmp74_ = self->cfile;
19723 _tmp75_ = wrapper;
19724 bala_ccode_file_add_function_declaration (_tmp74_, _tmp75_);
19725 _tmp76_ = self->cfile;
19726 _tmp77_ = wrapper;
19727 bala_ccode_file_add_function (_tmp76_, _tmp77_);
19728 _tmp78_ = bala_ccode_identifier_new ("g_node_traverse");
19729 _tmp79_ = _tmp78_;
19730 _tmp80_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp79_);
19731 _bala_ccode_node_unref0 (element_free_call)((element_free_call == ((void*)0)) ? ((void*)0) : (element_free_call
= (bala_ccode_node_unref (element_free_call), ((void*)0))))
;
19732 element_free_call = _tmp80_;
19733 _bala_ccode_node_unref0 (_tmp79_)((_tmp79_ == ((void*)0)) ? ((void*)0) : (_tmp79_ = (bala_ccode_node_unref
(_tmp79_), ((void*)0))))
;
19734 _tmp81_ = element_free_call;
19735 _tmp82_ = bala_ccode_identifier_new ("self");
19736 _tmp83_ = _tmp82_;
19737 bala_ccode_function_call_add_argument (_tmp81_, (BalaCCodeExpression*) _tmp83_);
19738 _bala_ccode_node_unref0 (_tmp83_)((_tmp83_ == ((void*)0)) ? ((void*)0) : (_tmp83_ = (bala_ccode_node_unref
(_tmp83_), ((void*)0))))
;
19739 _tmp84_ = element_free_call;
19740 _tmp85_ = bala_ccode_constant_new ("G_POST_ORDER");
19741 _tmp86_ = _tmp85_;
19742 bala_ccode_function_call_add_argument (_tmp84_, (BalaCCodeExpression*) _tmp86_);
19743 _bala_ccode_node_unref0 (_tmp86_)((_tmp86_ == ((void*)0)) ? ((void*)0) : (_tmp86_ = (bala_ccode_node_unref
(_tmp86_), ((void*)0))))
;
19744 _tmp87_ = element_free_call;
19745 _tmp88_ = bala_ccode_constant_new ("G_TRAVERSE_ALL");
19746 _tmp89_ = _tmp88_;
19747 bala_ccode_function_call_add_argument (_tmp87_, (BalaCCodeExpression*) _tmp89_);
19748 _bala_ccode_node_unref0 (_tmp89_)((_tmp89_ == ((void*)0)) ? ((void*)0) : (_tmp89_ = (bala_ccode_node_unref
(_tmp89_), ((void*)0))))
;
19749 _tmp90_ = element_free_call;
19750 _tmp91_ = bala_ccode_constant_new ("-1");
19751 _tmp92_ = _tmp91_;
19752 bala_ccode_function_call_add_argument (_tmp90_, (BalaCCodeExpression*) _tmp92_);
19753 _bala_ccode_node_unref0 (_tmp92_)((_tmp92_ == ((void*)0)) ? ((void*)0) : (_tmp92_ = (bala_ccode_node_unref
(_tmp92_), ((void*)0))))
;
19754 _tmp93_ = element_free_call;
19755 _tmp94_ = destroy_node_func;
19756 _tmp95_ = bala_ccode_identifier_new (_tmp94_);
19757 _tmp96_ = _tmp95_;
19758 _tmp97_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp96_, "GNodeTraverseFunc");
19759 _tmp98_ = _tmp97_;
19760 bala_ccode_function_call_add_argument (_tmp93_, (BalaCCodeExpression*) _tmp98_);
19761 _bala_ccode_node_unref0 (_tmp98_)((_tmp98_ == ((void*)0)) ? ((void*)0) : (_tmp98_ = (bala_ccode_node_unref
(_tmp98_), ((void*)0))))
;
19762 _bala_ccode_node_unref0 (_tmp96_)((_tmp96_ == ((void*)0)) ? ((void*)0) : (_tmp96_ = (bala_ccode_node_unref
(_tmp96_), ((void*)0))))
;
19763 _tmp99_ = element_free_call;
19764 _tmp100_ = bala_ccode_identifier_new ("free_func");
19765 _tmp101_ = _tmp100_;
19766 bala_ccode_function_call_add_argument (_tmp99_, (BalaCCodeExpression*) _tmp101_);
19767 _bala_ccode_node_unref0 (_tmp101_)((_tmp101_ == ((void*)0)) ? ((void*)0) : (_tmp101_ = (bala_ccode_node_unref
(_tmp101_), ((void*)0))))
;
19768 _tmp102_ = bala_ccode_identifier_new ("free_func");
19769 _tmp103_ = _tmp102_;
19770 _tmp104_ = bala_ccode_constant_new ("NULL");
19771 _tmp105_ = _tmp104_;
19772 _tmp106_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp103_, (BalaCCodeExpression*) _tmp105_);
19773 _tmp107_ = _tmp106_;
19774 _bala_ccode_node_unref0 (_tmp105_)((_tmp105_ == ((void*)0)) ? ((void*)0) : (_tmp105_ = (bala_ccode_node_unref
(_tmp105_), ((void*)0))))
;
19775 _bala_ccode_node_unref0 (_tmp103_)((_tmp103_ == ((void*)0)) ? ((void*)0) : (_tmp103_ = (bala_ccode_node_unref
(_tmp103_), ((void*)0))))
;
19776 free_func_isnull = _tmp107_;
19777 _tmp108_ = bala_ccode_comma_expression_new ();
19778 ccomma = _tmp108_;
19779 _tmp109_ = ccomma;
19780 _tmp110_ = free_func_isnull;
19781 _tmp111_ = bala_ccode_constant_new ("NULL");
19782 _tmp112_ = _tmp111_;
19783 _tmp113_ = element_free_call;
19784 _tmp114_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp110_, (BalaCCodeExpression*) _tmp112_, (BalaCCodeExpression*) _tmp113_);
19785 _tmp115_ = _tmp114_;
19786 bala_ccode_comma_expression_append_expression (_tmp109_, (BalaCCodeExpression*) _tmp115_);
19787 _bala_ccode_node_unref0 (_tmp115_)((_tmp115_ == ((void*)0)) ? ((void*)0) : (_tmp115_ = (bala_ccode_node_unref
(_tmp115_), ((void*)0))))
;
19788 _bala_ccode_node_unref0 (_tmp112_)((_tmp112_ == ((void*)0)) ? ((void*)0) : (_tmp112_ = (bala_ccode_node_unref
(_tmp112_), ((void*)0))))
;
19789 _tmp116_ = bala_ccode_base_module_get_ccode (self);
19790 _tmp117_ = _tmp116_;
19791 _tmp118_ = ccomma;
19792 bala_ccode_function_add_expression (_tmp117_, (BalaCCodeExpression*) _tmp118_);
19793 _tmp119_ = self->gnode_type;
19794 _tmp120_ = bala_get_ccode_free_function ((BalaTypeSymbol*) _tmp119_);
19795 _tmp121_ = _tmp120_;
19796 _tmp122_ = bala_ccode_identifier_new (_tmp121_);
19797 _tmp123_ = _tmp122_;
19798 _tmp124_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp123_);
19799 _tmp125_ = _tmp124_;
19800 _bala_ccode_node_unref0 (_tmp123_)((_tmp123_ == ((void*)0)) ? ((void*)0) : (_tmp123_ = (bala_ccode_node_unref
(_tmp123_), ((void*)0))))
;
19801 _g_free0 (_tmp121_)(_tmp121_ = (g_free (_tmp121_), ((void*)0)));
19802 cfreecall = _tmp125_;
19803 _tmp126_ = cfreecall;
19804 _tmp127_ = bala_ccode_identifier_new ("self");
19805 _tmp128_ = _tmp127_;
19806 bala_ccode_function_call_add_argument (_tmp126_, (BalaCCodeExpression*) _tmp128_);
19807 _bala_ccode_node_unref0 (_tmp128_)((_tmp128_ == ((void*)0)) ? ((void*)0) : (_tmp128_ = (bala_ccode_node_unref
(_tmp128_), ((void*)0))))
;
19808 _tmp129_ = bala_ccode_base_module_get_ccode (self);
19809 _tmp130_ = _tmp129_;
19810 _tmp131_ = cfreecall;
19811 bala_ccode_function_add_expression (_tmp130_, (BalaCCodeExpression*) _tmp131_);
19812 _tmp132_ = function;
19813 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp132_, BALA_CCODE_MODIFIERS_STATIC);
19814 bala_ccode_base_module_pop_function (self);
19815 _tmp133_ = self->cfile;
19816 _tmp134_ = function;
19817 bala_ccode_file_add_function_declaration (_tmp133_, _tmp134_);
19818 _tmp135_ = self->cfile;
19819 _tmp136_ = function;
19820 bala_ccode_file_add_function (_tmp135_, _tmp136_);
19821 _bala_ccode_node_unref0 (cfreecall)((cfreecall == ((void*)0)) ? ((void*)0) : (cfreecall = (bala_ccode_node_unref
(cfreecall), ((void*)0))))
;
19822 _bala_ccode_node_unref0 (ccomma)((ccomma == ((void*)0)) ? ((void*)0) : (ccomma = (bala_ccode_node_unref
(ccomma), ((void*)0))))
;
19823 _bala_ccode_node_unref0 (free_func_isnull)((free_func_isnull == ((void*)0)) ? ((void*)0) : (free_func_isnull
= (bala_ccode_node_unref (free_func_isnull), ((void*)0))))
;
19824 _bala_ccode_node_unref0 (ccomma_data)((ccomma_data == ((void*)0)) ? ((void*)0) : (ccomma_data = (bala_ccode_node_unref
(ccomma_data), ((void*)0))))
;
19825 _bala_ccode_node_unref0 (data_isnull)((data_isnull == ((void*)0)) ? ((void*)0) : (data_isnull = (bala_ccode_node_unref
(data_isnull), ((void*)0))))
;
19826 _bala_ccode_node_unref0 (free_call)((free_call == ((void*)0)) ? ((void*)0) : (free_call = (bala_ccode_node_unref
(free_call), ((void*)0))))
;
19827 _bala_ccode_node_unref0 (wrapper)((wrapper == ((void*)0)) ? ((void*)0) : (wrapper = (bala_ccode_node_unref
(wrapper), ((void*)0))))
;
19828 _g_free0 (destroy_node_func)(destroy_node_func = (g_free (destroy_node_func), ((void*)0))
)
;
19829 _bala_ccode_node_unref0 (element_free_call)((element_free_call == ((void*)0)) ? ((void*)0) : (element_free_call
= (bala_ccode_node_unref (element_free_call), ((void*)0))))
;
19830 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
19831 } else {
19832 BalaTypeSymbol* _tmp137_;
19833 BalaTypeSymbol* _tmp138_;
19834 BalaClass* _tmp139_;
19835 _tmp137_ = bala_data_type_get_type_symbol (collection_type);
19836 _tmp138_ = _tmp137_;
19837 _tmp139_ = self->glist_type;
19838 if (_tmp138_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp139_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp139_), ((bala_typesymbol_get_type ())))))
) {
19839 gchar* _tmp140_;
19840 _tmp140_ = g_strdup ("g_list_free_full");
19841 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
19842 destroy_func = _tmp140_;
19843 } else {
19844 BalaTypeSymbol* _tmp141_;
19845 BalaTypeSymbol* _tmp142_;
19846 BalaClass* _tmp143_;
19847 _tmp141_ = bala_data_type_get_type_symbol (collection_type);
19848 _tmp142_ = _tmp141_;
19849 _tmp143_ = self->gslist_type;
19850 if (_tmp142_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp143_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp143_), ((bala_typesymbol_get_type ())))))
) {
19851 gchar* _tmp144_;
19852 _tmp144_ = g_strdup ("g_slist_free_full");
19853 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
19854 destroy_func = _tmp144_;
19855 } else {
19856 BalaTypeSymbol* _tmp145_;
19857 BalaTypeSymbol* _tmp146_;
19858 BalaClass* _tmp147_;
19859 _tmp145_ = bala_data_type_get_type_symbol (collection_type);
19860 _tmp146_ = _tmp145_;
19861 _tmp147_ = self->gqueue_type;
19862 if (_tmp146_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp147_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp147_), ((bala_typesymbol_get_type ())))))
) {
19863 gchar* _tmp148_;
19864 _tmp148_ = g_strdup ("g_queue_free_full");
19865 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
19866 destroy_func = _tmp148_;
19867 } else {
19868 gchar* _tmp149_;
19869 bala_report_error (NULL((void*)0), "internal error: type of collection not supported");
19870 _tmp149_ = g_strdup ("");
19871 result = _tmp149_;
19872 _g_free0 (destroy_func_wrapper)(destroy_func_wrapper = (g_free (destroy_func_wrapper), ((void
*)0)))
;
19873 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
19874 return result;
19875 }
19876 }
19877 }
19878 }
19879 if (element_destroy_func_expression != NULL((void*)0)) {
19880 BalaCCodeFunction* function = NULL((void*)0);
19881 const gchar* _tmp150_;
19882 BalaCCodeFunction* _tmp151_;
19883 BalaCCodeFunction* _tmp152_;
19884 gchar* _tmp153_;
19885 gchar* _tmp154_;
19886 BalaCCodeParameter* _tmp155_;
19887 BalaCCodeParameter* _tmp156_;
19888 BalaCCodeFunction* _tmp157_;
19889 BalaCCodeFunctionCall* collection_free_call = NULL((void*)0);
19890 const gchar* _tmp158_;
19891 BalaCCodeIdentifier* _tmp159_;
19892 BalaCCodeIdentifier* _tmp160_;
19893 BalaCCodeFunctionCall* _tmp161_;
19894 BalaCCodeFunctionCall* _tmp162_;
19895 BalaCCodeFunctionCall* _tmp163_;
19896 BalaCCodeIdentifier* _tmp164_;
19897 BalaCCodeIdentifier* _tmp165_;
19898 BalaCCodeFunctionCall* _tmp166_;
19899 BalaCCodeCastExpression* _tmp167_;
19900 BalaCCodeCastExpression* _tmp168_;
19901 BalaCCodeFunction* _tmp169_;
19902 BalaCCodeFunction* _tmp170_;
19903 BalaCCodeFunctionCall* _tmp171_;
19904 BalaCCodeFunction* _tmp172_;
19905 BalaCCodeFile* _tmp173_;
19906 BalaCCodeFunction* _tmp174_;
19907 BalaCCodeFile* _tmp175_;
19908 BalaCCodeFunction* _tmp176_;
19909 _tmp150_ = destroy_func_wrapper;
19910 _tmp151_ = bala_ccode_function_new (_tmp150_, "void");
19911 function = _tmp151_;
19912 _tmp152_ = function;
19913 _tmp153_ = bala_get_ccode_name ((BalaCodeNode*) collection_type);
19914 _tmp154_ = _tmp153_;
19915 _tmp155_ = bala_ccode_parameter_new ("self", _tmp154_);
19916 _tmp156_ = _tmp155_;
19917 bala_ccode_function_add_parameter (_tmp152_, _tmp156_);
19918 _bala_ccode_node_unref0 (_tmp156_)((_tmp156_ == ((void*)0)) ? ((void*)0) : (_tmp156_ = (bala_ccode_node_unref
(_tmp156_), ((void*)0))))
;
19919 _g_free0 (_tmp154_)(_tmp154_ = (g_free (_tmp154_), ((void*)0)));
19920 _tmp157_ = function;
19921 bala_ccode_base_module_push_function (self, _tmp157_);
19922 _tmp158_ = destroy_func;
19923 _tmp159_ = bala_ccode_identifier_new (_tmp158_);
19924 _tmp160_ = _tmp159_;
19925 _tmp161_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp160_);
19926 _tmp162_ = _tmp161_;
19927 _bala_ccode_node_unref0 (_tmp160_)((_tmp160_ == ((void*)0)) ? ((void*)0) : (_tmp160_ = (bala_ccode_node_unref
(_tmp160_), ((void*)0))))
;
19928 collection_free_call = _tmp162_;
19929 _tmp163_ = collection_free_call;
19930 _tmp164_ = bala_ccode_identifier_new ("self");
19931 _tmp165_ = _tmp164_;
19932 bala_ccode_function_call_add_argument (_tmp163_, (BalaCCodeExpression*) _tmp165_);
19933 _bala_ccode_node_unref0 (_tmp165_)((_tmp165_ == ((void*)0)) ? ((void*)0) : (_tmp165_ = (bala_ccode_node_unref
(_tmp165_), ((void*)0))))
;
19934 _tmp166_ = collection_free_call;
19935 _tmp167_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) element_destroy_func_expression, "GDestroyNotify");
19936 _tmp168_ = _tmp167_;
19937 bala_ccode_function_call_add_argument (_tmp166_, (BalaCCodeExpression*) _tmp168_);
19938 _bala_ccode_node_unref0 (_tmp168_)((_tmp168_ == ((void*)0)) ? ((void*)0) : (_tmp168_ = (bala_ccode_node_unref
(_tmp168_), ((void*)0))))
;
19939 _tmp169_ = bala_ccode_base_module_get_ccode (self);
19940 _tmp170_ = _tmp169_;
19941 _tmp171_ = collection_free_call;
19942 bala_ccode_function_add_expression (_tmp170_, (BalaCCodeExpression*) _tmp171_);
19943 _tmp172_ = function;
19944 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp172_, BALA_CCODE_MODIFIERS_STATIC | BALA_CCODE_MODIFIERS_INLINE);
19945 bala_ccode_base_module_pop_function (self);
19946 _tmp173_ = self->cfile;
19947 _tmp174_ = function;
19948 bala_ccode_file_add_function_declaration (_tmp173_, _tmp174_);
19949 _tmp175_ = self->cfile;
19950 _tmp176_ = function;
19951 bala_ccode_file_add_function (_tmp175_, _tmp176_);
19952 result = destroy_func_wrapper;
19953 _bala_ccode_node_unref0 (collection_free_call)((collection_free_call == ((void*)0)) ? ((void*)0) : (collection_free_call
= (bala_ccode_node_unref (collection_free_call), ((void*)0))
))
;
19954 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
19955 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
19956 return result;
19957 }
19958 result = destroy_func;
19959 _g_free0 (destroy_func_wrapper)(destroy_func_wrapper = (g_free (destroy_func_wrapper), ((void
*)0)))
;
19960 return result;
19961}
19962
19963static gchar*
19964bala_ccode_base_module_real_append_struct_array_destroy (BalaCCodeBaseModule* self,
19965 BalaStruct* st)
19966{
19967 gchar* result = NULL((void*)0);
19968 g_return_val_if_fail (st != NULL, NULL)do { if ((st != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "st != NULL");
return (((void*)0)); } } while (0)
;
19969 result = NULL((void*)0);
19970 return result;
19971}
19972
19973gchar*
19974bala_ccode_base_module_append_struct_array_destroy (BalaCCodeBaseModule* self,
19975 BalaStruct* st)
19976{
19977 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
19978 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->append_struct_array_destroy (self, st);
19979}
19980
19981static gchar*
19982bala_ccode_base_module_real_append_struct_array_free (BalaCCodeBaseModule* self,
19983 BalaStruct* st)
19984{
19985 gchar* result = NULL((void*)0);
19986 g_return_val_if_fail (st != NULL, NULL)do { if ((st != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "st != NULL");
return (((void*)0)); } } while (0)
;
19987 result = NULL((void*)0);
19988 return result;
19989}
19990
19991gchar*
19992bala_ccode_base_module_append_struct_array_free (BalaCCodeBaseModule* self,
19993 BalaStruct* st)
19994{
19995 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
19996 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->append_struct_array_free (self, st);
19997}
19998
19999BalaCCodeExpression*
20000bala_ccode_base_module_destroy_local (BalaCCodeBaseModule* self,
20001 BalaLocalVariable* local)
20002{
20003 BalaTargetValue* _tmp0_;
20004 BalaTargetValue* _tmp1_;
20005 BalaCCodeExpression* _tmp2_;
20006 BalaCCodeExpression* _tmp3_;
20007 BalaCCodeExpression* result = NULL((void*)0);
20008 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
20009 g_return_val_if_fail (local != NULL, NULL)do { if ((local != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "local != NULL"
); return (((void*)0)); } } while (0)
;
20010 _tmp0_ = bala_ccode_base_module_get_local_cvalue (self, local);
20011 _tmp1_ = _tmp0_;
20012 _tmp2_ = bala_ccode_base_module_destroy_value (self, _tmp1_, FALSE(0));
20013 _tmp3_ = _tmp2_;
20014 _bala_target_value_unref0 (_tmp1_)((_tmp1_ == ((void*)0)) ? ((void*)0) : (_tmp1_ = (bala_target_value_unref
(_tmp1_), ((void*)0))))
;
20015 result = _tmp3_;
20016 return result;
20017}
20018
20019BalaCCodeExpression*
20020bala_ccode_base_module_destroy_parameter (BalaCCodeBaseModule* self,
20021 BalaParameter* param)
20022{
20023 BalaTargetValue* _tmp0_;
20024 BalaTargetValue* _tmp1_;
20025 BalaCCodeExpression* _tmp2_;
20026 BalaCCodeExpression* _tmp3_;
20027 BalaCCodeExpression* result = NULL((void*)0);
20028 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
20029 g_return_val_if_fail (param != NULL, NULL)do { if ((param != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "param != NULL"
); return (((void*)0)); } } while (0)
;
20030 _tmp0_ = bala_ccode_base_module_get_parameter_cvalue (self, param);
20031 _tmp1_ = _tmp0_;
20032 _tmp2_ = bala_ccode_base_module_destroy_value (self, _tmp1_, FALSE(0));
20033 _tmp3_ = _tmp2_;
20034 _bala_target_value_unref0 (_tmp1_)((_tmp1_ == ((void*)0)) ? ((void*)0) : (_tmp1_ = (bala_target_value_unref
(_tmp1_), ((void*)0))))
;
20035 result = _tmp3_;
20036 return result;
20037}
20038
20039BalaCCodeExpression*
20040bala_ccode_base_module_destroy_field (BalaCCodeBaseModule* self,
20041 BalaField* field,
20042 BalaTargetValue* instance)
20043{
20044 BalaTargetValue* _tmp0_;
20045 BalaTargetValue* _tmp1_;
20046 BalaCCodeExpression* _tmp2_;
20047 BalaCCodeExpression* _tmp3_;
20048 BalaCCodeExpression* result = NULL((void*)0);
20049 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
20050 g_return_val_if_fail (field != NULL, NULL)do { if ((field != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "field != NULL"
); return (((void*)0)); } } while (0)
;
20051 _tmp0_ = bala_ccode_base_module_get_field_cvalue (self, field, instance);
20052 _tmp1_ = _tmp0_;
20053 _tmp2_ = bala_ccode_base_module_destroy_value (self, _tmp1_, FALSE(0));
20054 _tmp3_ = _tmp2_;
20055 _bala_target_value_unref0 (_tmp1_)((_tmp1_ == ((void*)0)) ? ((void*)0) : (_tmp1_ = (bala_target_value_unref
(_tmp1_), ((void*)0))))
;
20056 result = _tmp3_;
20057 return result;
20058}
20059
20060static BalaCCodeExpression*
20061bala_ccode_base_module_real_destroy_value (BalaCCodeBaseModule* self,
20062 BalaTargetValue* value,
20063 gboolean is_macro_definition)
20064{
20065 BalaDataType* type = NULL((void*)0);
20066 BalaDataType* _tmp0_;
20067 BalaDataType* _tmp1_;
20068 BalaDataType* _tmp2_;
20069 BalaDataType* _tmp3_;
20070 BalaDataType* _tmp4_;
20071 BalaCCodeExpression* cvar = NULL((void*)0);
20072 BalaCCodeExpression* _tmp8_;
20073 BalaCCodeExpression* _tmp9_;
20074 BalaDataType* _tmp10_;
20075 gboolean _tmp58_ = FALSE(0);
20076 gboolean _tmp59_ = FALSE(0);
20077 gboolean _tmp60_ = FALSE(0);
20078 BalaDataType* _tmp61_;
20079 BalaTypeSymbol* _tmp62_;
20080 BalaTypeSymbol* _tmp63_;
20081 BalaClass* _tmp64_;
20082 gboolean is_gcollection = FALSE(0);
20083 BalaCCodeFunctionCall* ccall = NULL((void*)0);
20084 BalaCCodeExpression* cexpr = NULL((void*)0);
20085 BalaDataType* _tmp77_;
20086 BalaCCodeExpression* _tmp78_;
20087 gboolean _tmp79_ = FALSE(0);
20088 gboolean _tmp85_ = FALSE(0);
20089 BalaDataType* _tmp86_;
20090 gboolean _tmp157_ = FALSE(0);
20091 gboolean _tmp158_ = FALSE(0);
20092 gboolean _tmp159_ = FALSE(0);
20093 gboolean _tmp160_ = FALSE(0);
20094 BalaCodeContext* _tmp205_;
20095 BalaProfile _tmp206_;
20096 BalaProfile _tmp207_;
20097 BalaCCodeBinaryExpression* cisnull = NULL((void*)0);
20098 BalaCCodeExpression* _tmp209_;
20099 BalaCCodeConstant* _tmp210_;
20100 BalaCCodeConstant* _tmp211_;
20101 BalaCCodeBinaryExpression* _tmp212_;
20102 BalaCCodeBinaryExpression* _tmp213_;
20103 BalaDataType* _tmp214_;
20104 BalaCCodeFunctionCall* _tmp243_;
20105 BalaCCodeExpression* _tmp244_;
20106 BalaCCodeCommaExpression* ccomma = NULL((void*)0);
20107 BalaCCodeCommaExpression* _tmp245_;
20108 gboolean _tmp246_ = FALSE(0);
20109 gboolean _tmp247_ = FALSE(0);
20110 gboolean _tmp248_ = FALSE(0);
20111 BalaCodeContext* _tmp249_;
20112 BalaProfile _tmp250_;
20113 BalaProfile _tmp251_;
20114 BalaCCodeCommaExpression* _tmp351_;
20115 BalaCCodeFunctionCall* _tmp352_;
20116 BalaCCodeCommaExpression* _tmp353_;
20117 BalaCCodeConstant* _tmp354_;
20118 BalaCCodeConstant* _tmp355_;
20119 BalaCCodeAssignment* cassign = NULL((void*)0);
20120 BalaCCodeExpression* _tmp356_;
20121 BalaCCodeCommaExpression* _tmp357_;
20122 BalaCCodeAssignment* _tmp358_;
20123 gboolean _tmp359_ = FALSE(0);
20124 gboolean _tmp360_ = FALSE(0);
20125 BalaDataType* _tmp361_;
20126 BalaTypeSymbol* _tmp362_;
20127 BalaTypeSymbol* _tmp363_;
20128 gboolean uses_gfree = FALSE(0);
20129 gboolean _tmp372_ = FALSE(0);
20130 BalaCCodeBinaryExpression* _tmp374_;
20131 BalaCCodeConstant* _tmp375_;
20132 BalaCCodeConstant* _tmp376_;
20133 BalaCCodeAssignment* _tmp377_;
20134 BalaCCodeConditionalExpression* _tmp378_;
20135 BalaCCodeExpression* _tmp379_;
20136 BalaCCodeExpression* result = NULL((void*)0);
20137 g_return_val_if_fail (value != NULL, NULL)do { if ((value != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value != NULL"
); return (((void*)0)); } } while (0)
;
20138 _tmp0_ = bala_target_value_get_value_type (value);
20139 _tmp1_ = _tmp0_;
20140 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
20141 type = _tmp2_;
20142 _tmp3_ = bala_target_value_get_actual_value_type (value);
20143 _tmp4_ = _tmp3_;
20144 if (_tmp4_ != NULL((void*)0)) {
20145 BalaDataType* _tmp5_;
20146 BalaDataType* _tmp6_;
20147 BalaDataType* _tmp7_;
20148 _tmp5_ = bala_target_value_get_actual_value_type (value);
20149 _tmp6_ = _tmp5_;
20150 _tmp7_ = _bala_code_node_ref0 (_tmp6_);
20151 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
20152 type = _tmp7_;
20153 }
20154 _tmp8_ = bala_get_cvalue_ (value);
20155 _tmp9_ = _bala_ccode_node_ref0 (_tmp8_);
20156 cvar = _tmp9_;
20157 _tmp10_ = type;
20158 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp10_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
20159 BalaCodeContext* _tmp11_;
20160 BalaProfile _tmp12_;
20161 BalaProfile _tmp13_;
20162 BalaCCodeExpression* delegate_target = NULL((void*)0);
20163 BalaCCodeExpression* _tmp15_;
20164 BalaCCodeExpression* delegate_target_destroy_notify = NULL((void*)0);
20165 BalaCCodeExpression* _tmp16_;
20166 BalaCCodeFunctionCall* ccall = NULL((void*)0);
20167 BalaCCodeExpression* _tmp17_;
20168 BalaCCodeFunctionCall* _tmp18_;
20169 BalaCCodeFunctionCall* _tmp19_;
20170 BalaCCodeExpression* _tmp20_;
20171 BalaCCodeCommaExpression* destroy_call = NULL((void*)0);
20172 BalaCCodeCommaExpression* _tmp21_;
20173 BalaCCodeCommaExpression* _tmp22_;
20174 BalaCCodeFunctionCall* _tmp23_;
20175 BalaCCodeCommaExpression* _tmp24_;
20176 BalaCCodeConstant* _tmp25_;
20177 BalaCCodeConstant* _tmp26_;
20178 BalaCCodeBinaryExpression* cisnull = NULL((void*)0);
20179 BalaCCodeExpression* _tmp27_;
20180 BalaCCodeConstant* _tmp28_;
20181 BalaCCodeConstant* _tmp29_;
20182 BalaCCodeBinaryExpression* _tmp30_;
20183 BalaCCodeBinaryExpression* _tmp31_;
20184 BalaCCodeCommaExpression* ccomma = NULL((void*)0);
20185 BalaCCodeCommaExpression* _tmp32_;
20186 BalaCCodeCommaExpression* _tmp33_;
20187 BalaCCodeBinaryExpression* _tmp34_;
20188 BalaCCodeConstant* _tmp35_;
20189 BalaCCodeConstant* _tmp36_;
20190 BalaCCodeCommaExpression* _tmp37_;
20191 BalaCCodeConditionalExpression* _tmp38_;
20192 BalaCCodeConditionalExpression* _tmp39_;
20193 BalaCCodeCommaExpression* _tmp40_;
20194 BalaCCodeExpression* _tmp41_;
20195 BalaCCodeConstant* _tmp42_;
20196 BalaCCodeConstant* _tmp43_;
20197 BalaCCodeAssignment* _tmp44_;
20198 BalaCCodeAssignment* _tmp45_;
20199 BalaCCodeCommaExpression* _tmp46_;
20200 BalaCCodeExpression* _tmp47_;
20201 BalaCCodeConstant* _tmp48_;
20202 BalaCCodeConstant* _tmp49_;
20203 BalaCCodeAssignment* _tmp50_;
20204 BalaCCodeAssignment* _tmp51_;
20205 BalaCCodeCommaExpression* _tmp52_;
20206 BalaCCodeExpression* _tmp53_;
20207 BalaCCodeConstant* _tmp54_;
20208 BalaCCodeConstant* _tmp55_;
20209 BalaCCodeAssignment* _tmp56_;
20210 BalaCCodeAssignment* _tmp57_;
20211 _tmp11_ = self->priv->_context;
20212 _tmp12_ = bala_code_context_get_profile (_tmp11_);
20213 _tmp13_ = _tmp12_;
20214 if (_tmp13_ != BALA_PROFILE_GOBJECT) {
20215 BalaCCodeFile* _tmp14_;
20216 _tmp14_ = self->cfile;
20217 bala_ccode_file_add_include (_tmp14_, "stddef.h", FALSE(0));
20218 }
20219 _tmp15_ = bala_ccode_base_module_get_delegate_target_cvalue (self, value);
20220 delegate_target = _tmp15_;
20221 _tmp16_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, value);
20222 delegate_target_destroy_notify = _tmp16_;
20223 _tmp17_ = delegate_target_destroy_notify;
20224 _tmp18_ = bala_ccode_function_call_new (_tmp17_);
20225 ccall = _tmp18_;
20226 _tmp19_ = ccall;
20227 _tmp20_ = delegate_target;
20228 bala_ccode_function_call_add_argument (_tmp19_, _tmp20_);
20229 _tmp21_ = bala_ccode_comma_expression_new ();
20230 destroy_call = _tmp21_;
20231 _tmp22_ = destroy_call;
20232 _tmp23_ = ccall;
20233 bala_ccode_comma_expression_append_expression (_tmp22_, (BalaCCodeExpression*) _tmp23_);
20234 _tmp24_ = destroy_call;
20235 _tmp25_ = bala_ccode_constant_new ("NULL");
20236 _tmp26_ = _tmp25_;
20237 bala_ccode_comma_expression_append_expression (_tmp24_, (BalaCCodeExpression*) _tmp26_);
20238 _bala_ccode_node_unref0 (_tmp26_)((_tmp26_ == ((void*)0)) ? ((void*)0) : (_tmp26_ = (bala_ccode_node_unref
(_tmp26_), ((void*)0))))
;
20239 _tmp27_ = delegate_target_destroy_notify;
20240 _tmp28_ = bala_ccode_constant_new ("NULL");
20241 _tmp29_ = _tmp28_;
20242 _tmp30_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp27_, (BalaCCodeExpression*) _tmp29_);
20243 _tmp31_ = _tmp30_;
20244 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
20245 cisnull = _tmp31_;
20246 _tmp32_ = bala_ccode_comma_expression_new ();
20247 ccomma = _tmp32_;
20248 _tmp33_ = ccomma;
20249 _tmp34_ = cisnull;
20250 _tmp35_ = bala_ccode_constant_new ("NULL");
20251 _tmp36_ = _tmp35_;
20252 _tmp37_ = destroy_call;
20253 _tmp38_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp34_, (BalaCCodeExpression*) _tmp36_, (BalaCCodeExpression*) _tmp37_);
20254 _tmp39_ = _tmp38_;
20255 bala_ccode_comma_expression_append_expression (_tmp33_, (BalaCCodeExpression*) _tmp39_);
20256 _bala_ccode_node_unref0 (_tmp39_)((_tmp39_ == ((void*)0)) ? ((void*)0) : (_tmp39_ = (bala_ccode_node_unref
(_tmp39_), ((void*)0))))
;
20257 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
20258 _tmp40_ = ccomma;
20259 _tmp41_ = cvar;
20260 _tmp42_ = bala_ccode_constant_new ("NULL");
20261 _tmp43_ = _tmp42_;
20262 _tmp44_ = bala_ccode_assignment_new (_tmp41_, (BalaCCodeExpression*) _tmp43_, BALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
20263 _tmp45_ = _tmp44_;
20264 bala_ccode_comma_expression_append_expression (_tmp40_, (BalaCCodeExpression*) _tmp45_);
20265 _bala_ccode_node_unref0 (_tmp45_)((_tmp45_ == ((void*)0)) ? ((void*)0) : (_tmp45_ = (bala_ccode_node_unref
(_tmp45_), ((void*)0))))
;
20266 _bala_ccode_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_ccode_node_unref
(_tmp43_), ((void*)0))))
;
20267 _tmp46_ = ccomma;
20268 _tmp47_ = delegate_target;
20269 _tmp48_ = bala_ccode_constant_new ("NULL");
20270 _tmp49_ = _tmp48_;
20271 _tmp50_ = bala_ccode_assignment_new (_tmp47_, (BalaCCodeExpression*) _tmp49_, BALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
20272 _tmp51_ = _tmp50_;
20273 bala_ccode_comma_expression_append_expression (_tmp46_, (BalaCCodeExpression*) _tmp51_);
20274 _bala_ccode_node_unref0 (_tmp51_)((_tmp51_ == ((void*)0)) ? ((void*)0) : (_tmp51_ = (bala_ccode_node_unref
(_tmp51_), ((void*)0))))
;
20275 _bala_ccode_node_unref0 (_tmp49_)((_tmp49_ == ((void*)0)) ? ((void*)0) : (_tmp49_ = (bala_ccode_node_unref
(_tmp49_), ((void*)0))))
;
20276 _tmp52_ = ccomma;
20277 _tmp53_ = delegate_target_destroy_notify;
20278 _tmp54_ = bala_ccode_constant_new ("NULL");
20279 _tmp55_ = _tmp54_;
20280 _tmp56_ = bala_ccode_assignment_new (_tmp53_, (BalaCCodeExpression*) _tmp55_, BALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
20281 _tmp57_ = _tmp56_;
20282 bala_ccode_comma_expression_append_expression (_tmp52_, (BalaCCodeExpression*) _tmp57_);
20283 _bala_ccode_node_unref0 (_tmp57_)((_tmp57_ == ((void*)0)) ? ((void*)0) : (_tmp57_ = (bala_ccode_node_unref
(_tmp57_), ((void*)0))))
;
20284 _bala_ccode_node_unref0 (_tmp55_)((_tmp55_ == ((void*)0)) ? ((void*)0) : (_tmp55_ = (bala_ccode_node_unref
(_tmp55_), ((void*)0))))
;
20285 result = (BalaCCodeExpression*) ccomma;
20286 _bala_ccode_node_unref0 (cisnull)((cisnull == ((void*)0)) ? ((void*)0) : (cisnull = (bala_ccode_node_unref
(cisnull), ((void*)0))))
;
20287 _bala_ccode_node_unref0 (destroy_call)((destroy_call == ((void*)0)) ? ((void*)0) : (destroy_call = (
bala_ccode_node_unref (destroy_call), ((void*)0))))
;
20288 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
20289 _bala_ccode_node_unref0 (delegate_target_destroy_notify)((delegate_target_destroy_notify == ((void*)0)) ? ((void*)0) :
(delegate_target_destroy_notify = (bala_ccode_node_unref (delegate_target_destroy_notify
), ((void*)0))))
;
20290 _bala_ccode_node_unref0 (delegate_target)((delegate_target == ((void*)0)) ? ((void*)0) : (delegate_target
= (bala_ccode_node_unref (delegate_target), ((void*)0))))
;
20291 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20292 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
20293 return result;
20294 }
20295 _tmp61_ = type;
20296 _tmp62_ = bala_data_type_get_type_symbol (_tmp61_);
20297 _tmp63_ = _tmp62_;
20298 _tmp64_ = self->glist_type;
20299 if (_tmp63_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp64_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp64_), ((bala_typesymbol_get_type ())))))
) {
20300 _tmp60_ = TRUE(!(0));
20301 } else {
20302 BalaDataType* _tmp65_;
20303 BalaTypeSymbol* _tmp66_;
20304 BalaTypeSymbol* _tmp67_;
20305 BalaClass* _tmp68_;
20306 _tmp65_ = type;
20307 _tmp66_ = bala_data_type_get_type_symbol (_tmp65_);
20308 _tmp67_ = _tmp66_;
20309 _tmp68_ = self->gslist_type;
20310 _tmp60_ = _tmp67_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp68_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp68_), ((bala_typesymbol_get_type ())))))
;
20311 }
20312 if (_tmp60_) {
20313 _tmp59_ = TRUE(!(0));
20314 } else {
20315 BalaDataType* _tmp69_;
20316 BalaTypeSymbol* _tmp70_;
20317 BalaTypeSymbol* _tmp71_;
20318 BalaClass* _tmp72_;
20319 _tmp69_ = type;
20320 _tmp70_ = bala_data_type_get_type_symbol (_tmp69_);
20321 _tmp71_ = _tmp70_;
20322 _tmp72_ = self->gnode_type;
20323 _tmp59_ = _tmp71_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp72_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp72_), ((bala_typesymbol_get_type ())))))
;
20324 }
20325 if (_tmp59_) {
20326 _tmp58_ = TRUE(!(0));
20327 } else {
20328 BalaDataType* _tmp73_;
20329 BalaTypeSymbol* _tmp74_;
20330 BalaTypeSymbol* _tmp75_;
20331 BalaClass* _tmp76_;
20332 _tmp73_ = type;
20333 _tmp74_ = bala_data_type_get_type_symbol (_tmp73_);
20334 _tmp75_ = _tmp74_;
20335 _tmp76_ = self->gqueue_type;
20336 _tmp58_ = _tmp75_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp76_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp76_), ((bala_typesymbol_get_type ())))))
;
20337 }
20338 is_gcollection = _tmp58_;
20339 _tmp77_ = type;
20340 _tmp78_ = bala_ccode_base_module_get_destroy_func_expression (self, _tmp77_, FALSE(0));
20341 cexpr = _tmp78_;
20342 if (is_gcollection) {
20343 BalaCCodeExpression* _tmp80_;
20344 _tmp80_ = cexpr;
20345 _tmp79_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp80_, BALA_TYPE_CCODE_FUNCTION_CALL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp80_); GType __t = ((bala_ccode_function_call_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
;
20346 } else {
20347 _tmp79_ = FALSE(0);
20348 }
20349 if (_tmp79_) {
20350 BalaCCodeExpression* _tmp81_;
20351 BalaCCodeFunctionCall* _tmp82_;
20352 _tmp81_ = cexpr;
20353 _tmp82_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp81_, BALA_TYPE_CCODE_FUNCTION_CALL, BalaCCodeFunctionCall)(((BalaCCodeFunctionCall*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp81_), ((bala_ccode_function_call_get_type ())))))
);
20354 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
20355 ccall = _tmp82_;
20356 } else {
20357 BalaCCodeExpression* _tmp83_;
20358 BalaCCodeFunctionCall* _tmp84_;
20359 _tmp83_ = cexpr;
20360 _tmp84_ = bala_ccode_function_call_new (_tmp83_);
20361 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
20362 ccall = _tmp84_;
20363 }
20364 _tmp86_ = type;
20365 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp86_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp86_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
20366 BalaDataType* _tmp87_;
20367 gboolean _tmp88_;
20368 gboolean _tmp89_;
20369 _tmp87_ = type;
20370 _tmp88_ = bala_data_type_get_nullable (_tmp87_);
20371 _tmp89_ = _tmp88_;
20372 _tmp85_ = !_tmp89_;
20373 } else {
20374 _tmp85_ = FALSE(0);
20375 }
20376 if (_tmp85_) {
20377 BalaStruct* st = NULL((void*)0);
20378 BalaDataType* _tmp90_;
20379 BalaTypeSymbol* _tmp91_;
20380 BalaTypeSymbol* _tmp92_;
20381 gboolean _tmp93_ = FALSE(0);
20382 BalaStruct* _tmp94_;
20383 gboolean _tmp102_ = FALSE(0);
20384 BalaStruct* _tmp103_;
20385 _tmp90_ = type;
20386 _tmp91_ = bala_data_type_get_type_symbol (_tmp90_);
20387 _tmp92_ = _tmp91_;
20388 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp92_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp92_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp92_) : NULL((void*)0);
20389 _tmp94_ = st;
20390 if (_tmp94_ != NULL((void*)0)) {
20391 BalaStruct* _tmp95_;
20392 _tmp95_ = st;
20393 _tmp93_ = bala_struct_is_simple_type (_tmp95_);
20394 } else {
20395 _tmp93_ = FALSE(0);
20396 }
20397 if (_tmp93_) {
20398 BalaCCodeFunctionCall* _tmp96_;
20399 BalaCCodeExpression* _tmp97_;
20400 _tmp96_ = ccall;
20401 _tmp97_ = cvar;
20402 bala_ccode_function_call_add_argument (_tmp96_, _tmp97_);
20403 } else {
20404 BalaCCodeFunctionCall* _tmp98_;
20405 BalaCCodeExpression* _tmp99_;
20406 BalaCCodeUnaryExpression* _tmp100_;
20407 BalaCCodeUnaryExpression* _tmp101_;
20408 _tmp98_ = ccall;
20409 _tmp99_ = cvar;
20410 _tmp100_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp99_);
20411 _tmp101_ = _tmp100_;
20412 bala_ccode_function_call_add_argument (_tmp98_, (BalaCCodeExpression*) _tmp101_);
20413 _bala_ccode_node_unref0 (_tmp101_)((_tmp101_ == ((void*)0)) ? ((void*)0) : (_tmp101_ = (bala_ccode_node_unref
(_tmp101_), ((void*)0))))
;
20414 }
20415 _tmp103_ = self->gvalue_type;
20416 if (_tmp103_ != NULL((void*)0)) {
20417 BalaDataType* _tmp104_;
20418 BalaTypeSymbol* _tmp105_;
20419 BalaTypeSymbol* _tmp106_;
20420 BalaStruct* _tmp107_;
20421 _tmp104_ = type;
20422 _tmp105_ = bala_data_type_get_type_symbol (_tmp104_);
20423 _tmp106_ = _tmp105_;
20424 _tmp107_ = self->gvalue_type;
20425 _tmp102_ = _tmp106_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp107_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp107_), ((bala_typesymbol_get_type ())))))
;
20426 } else {
20427 _tmp102_ = FALSE(0);
20428 }
20429 if (_tmp102_) {
20430 BalaCCodeFunctionCall* cisvalid = NULL((void*)0);
20431 BalaCCodeIdentifier* _tmp108_;
20432 BalaCCodeIdentifier* _tmp109_;
20433 BalaCCodeFunctionCall* _tmp110_;
20434 BalaCCodeFunctionCall* _tmp111_;
20435 BalaCCodeFunctionCall* _tmp112_;
20436 BalaCCodeExpression* _tmp113_;
20437 BalaCCodeUnaryExpression* _tmp114_;
20438 BalaCCodeUnaryExpression* _tmp115_;
20439 BalaCCodeCommaExpression* ccomma = NULL((void*)0);
20440 BalaCCodeCommaExpression* _tmp116_;
20441 BalaCCodeCommaExpression* _tmp117_;
20442 BalaCCodeFunctionCall* _tmp118_;
20443 BalaCCodeCommaExpression* _tmp119_;
20444 BalaCCodeConstant* _tmp120_;
20445 BalaCCodeConstant* _tmp121_;
20446 BalaCCodeFunctionCall* _tmp122_;
20447 BalaCCodeCommaExpression* _tmp123_;
20448 BalaCCodeConstant* _tmp124_;
20449 BalaCCodeConstant* _tmp125_;
20450 BalaCCodeConditionalExpression* _tmp126_;
20451 BalaCCodeExpression* _tmp127_;
20452 _tmp108_ = bala_ccode_identifier_new ("G_IS_VALUE");
20453 _tmp109_ = _tmp108_;
20454 _tmp110_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp109_);
20455 _tmp111_ = _tmp110_;
20456 _bala_ccode_node_unref0 (_tmp109_)((_tmp109_ == ((void*)0)) ? ((void*)0) : (_tmp109_ = (bala_ccode_node_unref
(_tmp109_), ((void*)0))))
;
20457 cisvalid = _tmp111_;
20458 _tmp112_ = cisvalid;
20459 _tmp113_ = cvar;
20460 _tmp114_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp113_);
20461 _tmp115_ = _tmp114_;
20462 bala_ccode_function_call_add_argument (_tmp112_, (BalaCCodeExpression*) _tmp115_);
20463 _bala_ccode_node_unref0 (_tmp115_)((_tmp115_ == ((void*)0)) ? ((void*)0) : (_tmp115_ = (bala_ccode_node_unref
(_tmp115_), ((void*)0))))
;
20464 _tmp116_ = bala_ccode_comma_expression_new ();
20465 ccomma = _tmp116_;
20466 _tmp117_ = ccomma;
20467 _tmp118_ = ccall;
20468 bala_ccode_comma_expression_append_expression (_tmp117_, (BalaCCodeExpression*) _tmp118_);
20469 _tmp119_ = ccomma;
20470 _tmp120_ = bala_ccode_constant_new ("NULL");
20471 _tmp121_ = _tmp120_;
20472 bala_ccode_comma_expression_append_expression (_tmp119_, (BalaCCodeExpression*) _tmp121_);
20473 _bala_ccode_node_unref0 (_tmp121_)((_tmp121_ == ((void*)0)) ? ((void*)0) : (_tmp121_ = (bala_ccode_node_unref
(_tmp121_), ((void*)0))))
;
20474 _tmp122_ = cisvalid;
20475 _tmp123_ = ccomma;
20476 _tmp124_ = bala_ccode_constant_new ("NULL");
20477 _tmp125_ = _tmp124_;
20478 _tmp126_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp122_, (BalaCCodeExpression*) _tmp123_, (BalaCCodeExpression*) _tmp125_);
20479 _tmp127_ = (BalaCCodeExpression*) _tmp126_;
20480 _bala_ccode_node_unref0 (_tmp125_)((_tmp125_ == ((void*)0)) ? ((void*)0) : (_tmp125_ = (bala_ccode_node_unref
(_tmp125_), ((void*)0))))
;
20481 result = _tmp127_;
20482 _bala_ccode_node_unref0 (ccomma)((ccomma == ((void*)0)) ? ((void*)0) : (ccomma = (bala_ccode_node_unref
(ccomma), ((void*)0))))
;
20483 _bala_ccode_node_unref0 (cisvalid)((cisvalid == ((void*)0)) ? ((void*)0) : (cisvalid = (bala_ccode_node_unref
(cisvalid), ((void*)0))))
;
20484 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
20485 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
20486 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20487 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
20488 return result;
20489 } else {
20490 gboolean _tmp128_ = FALSE(0);
20491 gboolean _tmp129_ = FALSE(0);
20492 gboolean _tmp130_ = FALSE(0);
20493 BalaDataType* _tmp131_;
20494 BalaTypeSymbol* _tmp132_;
20495 BalaTypeSymbol* _tmp133_;
20496 BalaStruct* _tmp134_;
20497 _tmp131_ = type;
20498 _tmp132_ = bala_data_type_get_type_symbol (_tmp131_);
20499 _tmp133_ = _tmp132_;
20500 _tmp134_ = self->gmutex_type;
20501 if (_tmp133_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp134_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp134_), ((bala_typesymbol_get_type ())))))
) {
20502 _tmp130_ = TRUE(!(0));
20503 } else {
20504 BalaDataType* _tmp135_;
20505 BalaTypeSymbol* _tmp136_;
20506 BalaTypeSymbol* _tmp137_;
20507 BalaStruct* _tmp138_;
20508 _tmp135_ = type;
20509 _tmp136_ = bala_data_type_get_type_symbol (_tmp135_);
20510 _tmp137_ = _tmp136_;
20511 _tmp138_ = self->grecmutex_type;
20512 _tmp130_ = _tmp137_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp138_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp138_), ((bala_typesymbol_get_type ())))))
;
20513 }
20514 if (_tmp130_) {
20515 _tmp129_ = TRUE(!(0));
20516 } else {
20517 BalaDataType* _tmp139_;
20518 BalaTypeSymbol* _tmp140_;
20519 BalaTypeSymbol* _tmp141_;
20520 BalaStruct* _tmp142_;
20521 _tmp139_ = type;
20522 _tmp140_ = bala_data_type_get_type_symbol (_tmp139_);
20523 _tmp141_ = _tmp140_;
20524 _tmp142_ = self->grwlock_type;
20525 _tmp129_ = _tmp141_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp142_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp142_), ((bala_typesymbol_get_type ())))))
;
20526 }
20527 if (_tmp129_) {
20528 _tmp128_ = TRUE(!(0));
20529 } else {
20530 BalaDataType* _tmp143_;
20531 BalaTypeSymbol* _tmp144_;
20532 BalaTypeSymbol* _tmp145_;
20533 BalaStruct* _tmp146_;
20534 _tmp143_ = type;
20535 _tmp144_ = bala_data_type_get_type_symbol (_tmp143_);
20536 _tmp145_ = _tmp144_;
20537 _tmp146_ = self->gcond_type;
20538 _tmp128_ = _tmp145_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp146_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp146_), ((bala_typesymbol_get_type ())))))
;
20539 }
20540 if (_tmp128_) {
20541 BalaCCodeFunctionCall* _tmp147_;
20542 BalaDataType* _tmp148_;
20543 BalaTypeSymbol* _tmp149_;
20544 BalaTypeSymbol* _tmp150_;
20545 gchar* _tmp151_;
20546 gchar* _tmp152_;
20547 gchar* _tmp153_;
20548 gchar* _tmp154_;
20549 BalaCCodeIdentifier* _tmp155_;
20550 BalaCCodeIdentifier* _tmp156_;
20551 self->requires_clear_mutex = TRUE(!(0));
20552 _tmp147_ = ccall;
20553 _tmp148_ = type;
20554 _tmp149_ = bala_data_type_get_type_symbol (_tmp148_);
20555 _tmp150_ = _tmp149_;
20556 _tmp151_ = bala_get_ccode_name ((BalaCodeNode*) _tmp150_);
20557 _tmp152_ = _tmp151_;
20558 _tmp153_ = g_strconcat ("_bala_clear_", _tmp152_, NULL((void*)0));
20559 _tmp154_ = _tmp153_;
20560 _tmp155_ = bala_ccode_identifier_new (_tmp154_);
20561 _tmp156_ = _tmp155_;
20562 bala_ccode_function_call_set_call (_tmp147_, (BalaCCodeExpression*) _tmp156_);
20563 _bala_ccode_node_unref0 (_tmp156_)((_tmp156_ == ((void*)0)) ? ((void*)0) : (_tmp156_ = (bala_ccode_node_unref
(_tmp156_), ((void*)0))))
;
20564 _g_free0 (_tmp154_)(_tmp154_ = (g_free (_tmp154_), ((void*)0)));
20565 _g_free0 (_tmp152_)(_tmp152_ = (g_free (_tmp152_), ((void*)0)));
20566 result = (BalaCCodeExpression*) ccall;
20567 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
20568 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20569 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
20570 return result;
20571 } else {
20572 result = (BalaCCodeExpression*) ccall;
20573 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
20574 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20575 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
20576 return result;
20577 }
20578 }
20579 }
20580 if (!is_gcollection) {
20581 BalaCCodeFunctionCall* _tmp161_;
20582 BalaCCodeExpression* _tmp162_;
20583 BalaCCodeExpression* _tmp163_;
20584 _tmp161_ = ccall;
20585 _tmp162_ = bala_ccode_function_call_get_call (_tmp161_);
20586 _tmp163_ = _tmp162_;
20587 _tmp160_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp163_); GType __t = ((bala_ccode_identifier_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
;
20588 } else {
20589 _tmp160_ = FALSE(0);
20590 }
20591 if (_tmp160_) {
20592 BalaDataType* _tmp164_;
20593 _tmp164_ = type;
20594 _tmp159_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp164_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp164_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
20595 } else {
20596 _tmp159_ = FALSE(0);
20597 }
20598 if (_tmp159_) {
20599 BalaDataType* _tmp165_;
20600 _tmp165_ = type;
20601 _tmp158_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp165_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp165_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
20602 } else {
20603 _tmp158_ = FALSE(0);
20604 }
20605 if (_tmp158_) {
20606 _tmp157_ = !is_macro_definition;
20607 } else {
20608 _tmp157_ = FALSE(0);
20609 }
20610 if (_tmp157_) {
20611 BalaCCodeIdentifier* freeid = NULL((void*)0);
20612 BalaCCodeFunctionCall* _tmp166_;
20613 BalaCCodeExpression* _tmp167_;
20614 BalaCCodeExpression* _tmp168_;
20615 BalaCCodeIdentifier* _tmp169_;
20616 gchar* free0_func = NULL((void*)0);
20617 BalaCCodeIdentifier* _tmp170_;
20618 const gchar* _tmp171_;
20619 const gchar* _tmp172_;
20620 gchar* _tmp173_;
20621 const gchar* _tmp174_;
20622 BalaCCodeExpression* _tmp194_;
20623 const gchar* _tmp199_;
20624 BalaCCodeIdentifier* _tmp200_;
20625 BalaCCodeIdentifier* _tmp201_;
20626 BalaCCodeFunctionCall* _tmp202_;
20627 BalaCCodeFunctionCall* _tmp203_;
20628 BalaCCodeExpression* _tmp204_;
20629 _tmp166_ = ccall;
20630 _tmp167_ = bala_ccode_function_call_get_call (_tmp166_);
20631 _tmp168_ = _tmp167_;
20632 _tmp169_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp168_, BALA_TYPE_CCODE_IDENTIFIER, BalaCCodeIdentifier)(((BalaCCodeIdentifier*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp168_), ((bala_ccode_identifier_get_type ())))))
);
20633 freeid = _tmp169_;
20634 _tmp170_ = freeid;
20635 _tmp171_ = bala_ccode_identifier_get_name (_tmp170_);
20636 _tmp172_ = _tmp171_;
20637 _tmp173_ = g_strdup_printf ("_%s0", _tmp172_);
20638 free0_func = _tmp173_;
20639 _tmp174_ = free0_func;
20640 if (bala_ccode_base_module_add_wrapper (self, _tmp174_)) {
20641 BalaCCodeExpression* macro = NULL((void*)0);
20642 BalaDataType* _tmp175_;
20643 BalaCCodeIdentifier* _tmp176_;
20644 BalaCCodeIdentifier* _tmp177_;
20645 BalaGLibValue* _tmp178_;
20646 BalaGLibValue* _tmp179_;
20647 BalaCCodeExpression* _tmp180_;
20648 BalaCCodeExpression* _tmp181_;
20649 BalaCCodeFile* _tmp182_;
20650 const gchar* _tmp183_;
20651 gchar* _tmp184_;
20652 gchar* _tmp185_;
20653 BalaCCodeExpression* _tmp186_;
20654 BalaCCodeMacroReplacement* _tmp187_;
20655 BalaCCodeMacroReplacement* _tmp188_;
20656 _tmp175_ = type;
20657 _tmp176_ = bala_ccode_identifier_new ("var");
20658 _tmp177_ = _tmp176_;
20659 _tmp178_ = bala_glib_value_new (_tmp175_, (BalaCCodeExpression*) _tmp177_, TRUE(!(0)));
20660 _tmp179_ = _tmp178_;
20661 _tmp180_ = bala_ccode_base_module_destroy_value (self, (BalaTargetValue*) _tmp179_, TRUE(!(0)));
20662 _tmp181_ = _tmp180_;
20663 _bala_target_value_unref0 (_tmp179_)((_tmp179_ == ((void*)0)) ? ((void*)0) : (_tmp179_ = (bala_target_value_unref
(_tmp179_), ((void*)0))))
;
20664 _bala_ccode_node_unref0 (_tmp177_)((_tmp177_ == ((void*)0)) ? ((void*)0) : (_tmp177_ = (bala_ccode_node_unref
(_tmp177_), ((void*)0))))
;
20665 macro = _tmp181_;
20666 _tmp182_ = self->cfile;
20667 _tmp183_ = free0_func;
20668 _tmp184_ = g_strdup_printf ("%s(var)", _tmp183_);
20669 _tmp185_ = _tmp184_;
20670 _tmp186_ = macro;
20671 _tmp187_ = bala_ccode_macro_replacement_new_with_expression (_tmp185_, _tmp186_);
20672 _tmp188_ = _tmp187_;
20673 bala_ccode_file_add_type_declaration (_tmp182_, (BalaCCodeNode*) _tmp188_);
20674 _bala_ccode_node_unref0 (_tmp188_)((_tmp188_ == ((void*)0)) ? ((void*)0) : (_tmp188_ = (bala_ccode_node_unref
(_tmp188_), ((void*)0))))
;
20675 _g_free0 (_tmp185_)(_tmp185_ = (g_free (_tmp185_), ((void*)0)));
20676 _bala_ccode_node_unref0 (macro)((macro == ((void*)0)) ? ((void*)0) : (macro = (bala_ccode_node_unref
(macro), ((void*)0))))
;
20677 }
20678 while (TRUE(!(0))) {
20679 BalaCCodeExpression* _tmp189_;
20680 BalaCCodeExpression* _tmp190_;
20681 BalaCCodeExpression* _tmp191_;
20682 BalaCCodeExpression* _tmp192_;
20683 BalaCCodeExpression* _tmp193_;
20684 _tmp189_ = cvar;
20685 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, BALA_TYPE_CCODE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp189_); GType __t = ((bala_ccode_cast_expression_get_type (
))); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
20686 break;
20687 }
20688 _tmp190_ = cvar;
20689 _tmp191_ = bala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp190_, BALA_TYPE_CCODE_CAST_EXPRESSION, BalaCCodeCastExpression)(((BalaCCodeCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp190_), ((bala_ccode_cast_expression_get_type ())))))
);
20690 _tmp192_ = _tmp191_;
20691 _tmp193_ = _bala_ccode_node_ref0 (_tmp192_);
20692 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20693 cvar = _tmp193_;
20694 }
20695 _tmp194_ = cvar;
20696 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp194_, BALA_TYPE_CCODE_FUNCTION_CALL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp194_); GType __t = ((bala_ccode_function_call_get_type ()
)); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
20697 BalaCCodeExpression* _tmp195_;
20698 BalaList* _tmp196_;
20699 BalaList* _tmp197_;
20700 gpointer _tmp198_;
20701 _tmp195_ = cvar;
20702 _tmp196_ = bala_ccode_function_call_get_arguments (G_TYPE_CHECK_INSTANCE_CAST (_tmp195_, BALA_TYPE_CCODE_FUNCTION_CALL, BalaCCodeFunctionCall)(((BalaCCodeFunctionCall*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp195_), ((bala_ccode_function_call_get_type ())))))
);
20703 _tmp197_ = _tmp196_;
20704 _tmp198_ = bala_list_get (_tmp197_, 0);
20705 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20706 cvar = (BalaCCodeExpression*) _tmp198_;
20707 _bala_iterable_unref0 (_tmp197_)((_tmp197_ == ((void*)0)) ? ((void*)0) : (_tmp197_ = (bala_iterable_unref
(_tmp197_), ((void*)0))))
;
20708 }
20709 _tmp199_ = free0_func;
20710 _tmp200_ = bala_ccode_identifier_new (_tmp199_);
20711 _tmp201_ = _tmp200_;
20712 _tmp202_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp201_);
20713 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
20714 ccall = _tmp202_;
20715 _bala_ccode_node_unref0 (_tmp201_)((_tmp201_ == ((void*)0)) ? ((void*)0) : (_tmp201_ = (bala_ccode_node_unref
(_tmp201_), ((void*)0))))
;
20716 _tmp203_ = ccall;
20717 _tmp204_ = cvar;
20718 bala_ccode_function_call_add_argument (_tmp203_, _tmp204_);
20719 result = (BalaCCodeExpression*) ccall;
20720 _g_free0 (free0_func)(free0_func = (g_free (free0_func), ((void*)0)));
20721 _bala_ccode_node_unref0 (freeid)((freeid == ((void*)0)) ? ((void*)0) : (freeid = (bala_ccode_node_unref
(freeid), ((void*)0))))
;
20722 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
20723 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20724 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
20725 return result;
20726 }
20727 _tmp205_ = self->priv->_context;
20728 _tmp206_ = bala_code_context_get_profile (_tmp205_);
20729 _tmp207_ = _tmp206_;
20730 if (_tmp207_ != BALA_PROFILE_GOBJECT) {
20731 BalaCCodeFile* _tmp208_;
20732 _tmp208_ = self->cfile;
20733 bala_ccode_file_add_include (_tmp208_, "stddef.h", FALSE(0));
20734 }
20735 _tmp209_ = cvar;
20736 _tmp210_ = bala_ccode_constant_new ("NULL");
20737 _tmp211_ = _tmp210_;
20738 _tmp212_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp209_, (BalaCCodeExpression*) _tmp211_);
20739 _tmp213_ = _tmp212_;
20740 _bala_ccode_node_unref0 (_tmp211_)((_tmp211_ == ((void*)0)) ? ((void*)0) : (_tmp211_ = (bala_ccode_node_unref
(_tmp211_), ((void*)0))))
;
20741 cisnull = _tmp213_;
20742 _tmp214_ = type;
20743 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp214_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp214_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
20744 BalaSymbol* parent = NULL((void*)0);
20745 BalaDataType* _tmp215_;
20746 BalaTypeParameter* _tmp216_;
20747 BalaTypeParameter* _tmp217_;
20748 BalaSymbol* _tmp218_;
20749 BalaSymbol* _tmp219_;
20750 BalaSymbol* _tmp220_;
20751 BalaClass* cl = NULL((void*)0);
20752 BalaSymbol* _tmp221_;
20753 BalaClass* _tmp222_;
20754 gboolean _tmp223_ = FALSE(0);
20755 gboolean _tmp224_ = FALSE(0);
20756 BalaSymbol* _tmp225_;
20757 BalaCCodeBinaryExpression* cunrefisnull = NULL((void*)0);
20758 BalaDataType* _tmp233_;
20759 BalaCCodeExpression* _tmp234_;
20760 BalaCCodeExpression* _tmp235_;
20761 BalaCCodeConstant* _tmp236_;
20762 BalaCCodeConstant* _tmp237_;
20763 BalaCCodeBinaryExpression* _tmp238_;
20764 BalaCCodeBinaryExpression* _tmp239_;
20765 BalaCCodeBinaryExpression* _tmp240_;
20766 BalaCCodeBinaryExpression* _tmp241_;
20767 BalaCCodeBinaryExpression* _tmp242_;
20768 _tmp215_ = type;
20769 _tmp216_ = bala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp215_, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp215_), ((bala_generic_type_get_type ())))))
);
20770 _tmp217_ = _tmp216_;
20771 _tmp218_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp217_);
20772 _tmp219_ = _tmp218_;
20773 _tmp220_ = _bala_code_node_ref0 (_tmp219_);
20774 parent = _tmp220_;
20775 _tmp221_ = parent;
20776 _tmp222_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp221_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp221_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp221_) : NULL((void*)0));
20777 cl = _tmp222_;
20778 _tmp225_ = parent;
20779 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp225_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp225_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
20780 BalaSymbol* _tmp226_;
20781 _tmp226_ = parent;
20782 _tmp224_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp226_, BALA_TYPE_OBJECT_TYPE_SYMBOL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp226_); GType __t = ((bala_object_type_symbol_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
;
20783 } else {
20784 _tmp224_ = FALSE(0);
20785 }
20786 if (_tmp224_) {
20787 _tmp223_ = TRUE(!(0));
20788 } else {
20789 gboolean _tmp227_ = FALSE(0);
20790 BalaClass* _tmp228_;
20791 _tmp228_ = cl;
20792 if (_tmp228_ != NULL((void*)0)) {
20793 BalaClass* _tmp229_;
20794 gboolean _tmp230_;
20795 gboolean _tmp231_;
20796 _tmp229_ = cl;
20797 _tmp230_ = bala_class_get_is_compact (_tmp229_);
20798 _tmp231_ = _tmp230_;
20799 _tmp227_ = _tmp231_;
20800 } else {
20801 _tmp227_ = FALSE(0);
20802 }
20803 _tmp223_ = _tmp227_;
20804 }
20805 if (_tmp223_) {
20806 BalaCCodeConstant* _tmp232_;
20807 _tmp232_ = bala_ccode_constant_new ("NULL");
20808 result = (BalaCCodeExpression*) _tmp232_;
20809 _bala_code_node_unref0 (cl)((cl == ((void*)0)) ? ((void*)0) : (cl = (bala_code_node_unref
(cl), ((void*)0))))
;
20810 _bala_code_node_unref0 (parent)((parent == ((void*)0)) ? ((void*)0) : (parent = (bala_code_node_unref
(parent), ((void*)0))))
;
20811 _bala_ccode_node_unref0 (cisnull)((cisnull == ((void*)0)) ? ((void*)0) : (cisnull = (bala_ccode_node_unref
(cisnull), ((void*)0))))
;
20812 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
20813 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
20814 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
20815 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
20816 return result;
20817 }
20818 _tmp233_ = type;
20819 _tmp234_ = bala_ccode_base_module_get_destroy_func_expression (self, _tmp233_, FALSE(0));
20820 _tmp235_ = _tmp234_;
20821 _tmp236_ = bala_ccode_constant_new ("NULL");
20822 _tmp237_ = _tmp236_;
20823 _tmp238_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp235_, (BalaCCodeExpression*) _tmp237_);
20824 _tmp239_ = _tmp238_;
20825 _bala_ccode_node_unref0 (_tmp237_)((_tmp237_ == ((void*)0)) ? ((void*)0) : (_tmp237_ = (bala_ccode_node_unref
(_tmp237_), ((void*)0))))
;
20826 _bala_ccode_node_unref0 (_tmp235_)((_tmp235_ == ((void*)0)) ? ((void*)0) : (_tmp235_ = (bala_ccode_node_unref
(_tmp235_), ((void*)0))))
;
20827 cunrefisnull = _tmp239_;
20828 _tmp240_ = cisnull;
20829 _tmp241_ = cunrefisnull;
20830 _tmp242_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_OR, (BalaCCodeExpression*) _tmp240_, (BalaCCodeExpression*) _tmp241_);
20831 _bala_ccode_node_unref0 (cisnull)((cisnull == ((void*)0)) ? ((void*)0) : (cisnull = (bala_ccode_node_unref
(cisnull), ((void*)0))))
;
20832 cisnull = _tmp242_;
20833 _bala_ccode_node_unref0 (cunrefisnull)((cunrefisnull == ((void*)0)) ? ((void*)0) : (cunrefisnull = (
bala_ccode_node_unref (cunrefisnull), ((void*)0))))
;
20834 _bala_code_node_unref0 (cl)((cl == ((void*)0)) ? ((void*)0) : (cl = (bala_code_node_unref
(cl), ((void*)0))))
;
20835 _bala_code_node_unref0 (parent)((parent == ((void*)0)) ? ((void*)0) : (parent = (bala_code_node_unref
(parent), ((void*)0))))
;
20836 }
20837 _tmp243_ = ccall;
20838 _tmp244_ = cvar;
20839 bala_ccode_function_call_insert_argument (_tmp243_, 0, _tmp244_);
20840 _tmp245_ = bala_ccode_comma_expression_new ();
20841 ccomma = _tmp245_;
20842 _tmp249_ = self->priv->_context;
20843 _tmp250_ = bala_code_context_get_profile (_tmp249_);
20844 _tmp251_ = _tmp250_;
20845 if (_tmp251_ == BALA_PROFILE_GOBJECT) {
20846 BalaDataType* _tmp252_;
20847 BalaTypeSymbol* _tmp253_;
20848 BalaTypeSymbol* _tmp254_;
20849 _tmp252_ = type;
20850 _tmp253_ = bala_data_type_get_type_symbol (_tmp252_);
20851 _tmp254_ = _tmp253_;
20852 _tmp248_ = _tmp254_ != NULL((void*)0);
20853 } else {
20854 _tmp248_ = FALSE(0);
20855 }
20856 if (_tmp248_) {
20857 BalaDataType* _tmp255_;
20858 BalaTypeSymbol* _tmp256_;
20859 BalaTypeSymbol* _tmp257_;
20860 _tmp255_ = type;
20861 _tmp256_ = bala_data_type_get_type_symbol (_tmp255_);
20862 _tmp257_ = _tmp256_;
20863 _tmp247_ = !bala_is_reference_counting (_tmp257_);
20864 } else {
20865 _tmp247_ = FALSE(0);
20866 }
20867 if (_tmp247_) {
20868 gboolean _tmp258_ = FALSE(0);
20869 gboolean _tmp259_ = FALSE(0);
20870 gboolean _tmp260_ = FALSE(0);
20871 BalaDataType* _tmp261_;
20872 BalaTypeSymbol* _tmp262_;
20873 BalaTypeSymbol* _tmp263_;
20874 BalaTypeSymbol* _tmp264_;
20875 _tmp261_ = type;
20876 _tmp262_ = bala_data_type_get_type_symbol (_tmp261_);
20877 _tmp263_ = _tmp262_;
20878 _tmp264_ = self->gstringbuilder_type;
20879 if (bala_typesymbol_is_subtype_of (_tmp263_, _tmp264_)) {
20880 _tmp260_ = TRUE(!(0));
20881 } else {
20882 BalaDataType* _tmp265_;
20883 BalaTypeSymbol* _tmp266_;
20884 BalaTypeSymbol* _tmp267_;
20885 BalaTypeSymbol* _tmp268_;
20886 _tmp265_ = type;
20887 _tmp266_ = bala_data_type_get_type_symbol (_tmp265_);
20888 _tmp267_ = _tmp266_;
20889 _tmp268_ = self->garray_type;
20890 _tmp260_ = bala_typesymbol_is_subtype_of (_tmp267_, _tmp268_);
20891 }
20892 if (_tmp260_) {
20893 _tmp259_ = TRUE(!(0));
20894 } else {
20895 BalaDataType* _tmp269_;
20896 BalaTypeSymbol* _tmp270_;
20897 BalaTypeSymbol* _tmp271_;
20898 BalaTypeSymbol* _tmp272_;
20899 _tmp269_ = type;
20900 _tmp270_ = bala_data_type_get_type_symbol (_tmp269_);
20901 _tmp271_ = _tmp270_;
20902 _tmp272_ = self->gbytearray_type;
20903 _tmp259_ = bala_typesymbol_is_subtype_of (_tmp271_, _tmp272_);
20904 }
20905 if (_tmp259_) {
20906 _tmp258_ = TRUE(!(0));
20907 } else {
20908 BalaDataType* _tmp273_;
20909 BalaTypeSymbol* _tmp274_;
20910 BalaTypeSymbol* _tmp275_;
20911 BalaTypeSymbol* _tmp276_;
20912 _tmp273_ = type;
20913 _tmp274_ = bala_data_type_get_type_symbol (_tmp273_);
20914 _tmp275_ = _tmp274_;
20915 _tmp276_ = self->gptrarray_type;
20916 _tmp258_ = bala_typesymbol_is_subtype_of (_tmp275_, _tmp276_);
20917 }
20918 _tmp246_ = _tmp258_;
20919 } else {
20920 _tmp246_ = FALSE(0);
20921 }
20922 if (_tmp246_) {
20923 BalaCCodeFunctionCall* _tmp277_;
20924 BalaCCodeConstant* _tmp278_;
20925 BalaCCodeConstant* _tmp279_;
20926 _tmp277_ = ccall;
20927 _tmp278_ = bala_ccode_constant_new ("TRUE");
20928 _tmp279_ = _tmp278_;
20929 bala_ccode_function_call_add_argument (_tmp277_, (BalaCCodeExpression*) _tmp279_);
20930 _bala_ccode_node_unref0 (_tmp279_)((_tmp279_ == ((void*)0)) ? ((void*)0) : (_tmp279_ = (bala_ccode_node_unref
(_tmp279_), ((void*)0))))
;
20931 } else {
20932 gboolean _tmp280_ = FALSE(0);
20933 BalaCodeContext* _tmp281_;
20934 BalaProfile _tmp282_;
20935 BalaProfile _tmp283_;
20936 _tmp281_ = self->priv->_context;
20937 _tmp282_ = bala_code_context_get_profile (_tmp281_);
20938 _tmp283_ = _tmp282_;
20939 if (_tmp283_ == BALA_PROFILE_GOBJECT) {
20940 BalaDataType* _tmp284_;
20941 BalaTypeSymbol* _tmp285_;
20942 BalaTypeSymbol* _tmp286_;
20943 BalaTypeSymbol* _tmp287_;
20944 _tmp284_ = type;
20945 _tmp285_ = bala_data_type_get_type_symbol (_tmp284_);
20946 _tmp286_ = _tmp285_;
20947 _tmp287_ = self->gthreadpool_type;
20948 _tmp280_ = _tmp286_ == _tmp287_;
20949 } else {
20950 _tmp280_ = FALSE(0);
20951 }
20952 if (_tmp280_) {
20953 BalaCCodeFunctionCall* _tmp288_;
20954 BalaCCodeConstant* _tmp289_;
20955 BalaCCodeConstant* _tmp290_;
20956 BalaCCodeFunctionCall* _tmp291_;
20957 BalaCCodeConstant* _tmp292_;
20958 BalaCCodeConstant* _tmp293_;
20959 _tmp288_ = ccall;
20960 _tmp289_ = bala_ccode_constant_new ("FALSE");
20961 _tmp290_ = _tmp289_;
20962 bala_ccode_function_call_add_argument (_tmp288_, (BalaCCodeExpression*) _tmp290_);
20963 _bala_ccode_node_unref0 (_tmp290_)((_tmp290_ == ((void*)0)) ? ((void*)0) : (_tmp290_ = (bala_ccode_node_unref
(_tmp290_), ((void*)0))))
;
20964 _tmp291_ = ccall;
20965 _tmp292_ = bala_ccode_constant_new ("TRUE");
20966 _tmp293_ = _tmp292_;
20967 bala_ccode_function_call_add_argument (_tmp291_, (BalaCCodeExpression*) _tmp293_);
20968 _bala_ccode_node_unref0 (_tmp293_)((_tmp293_ == ((void*)0)) ? ((void*)0) : (_tmp293_ = (bala_ccode_node_unref
(_tmp293_), ((void*)0))))
;
20969 } else {
20970 BalaDataType* _tmp294_;
20971 _tmp294_ = type;
20972 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp294_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp294_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
20973 BalaArrayType* array_type = NULL((void*)0);
20974 BalaDataType* _tmp295_;
20975 BalaArrayType* _tmp296_;
20976 BalaArrayType* _tmp297_;
20977 BalaDataType* _tmp298_;
20978 BalaDataType* _tmp299_;
20979 _tmp295_ = type;
20980 _tmp296_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp295_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp295_), ((bala_array_type_get_type ())))))
);
20981 array_type = _tmp296_;
20982 _tmp297_ = array_type;
20983 _tmp298_ = bala_array_type_get_element_type (_tmp297_);
20984 _tmp299_ = _tmp298_;
20985 if (bala_ccode_base_module_requires_destroy (_tmp299_)) {
20986 BalaCCodeExpression* csizeexpr = NULL((void*)0);
20987 BalaList* _tmp300_;
20988 BalaCCodeExpression* _tmp312_;
20989 csizeexpr = NULL((void*)0);
20990 _tmp300_ = G_TYPE_CHECK_INSTANCE_CAST (value, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (value), ((bala_glib_value_get_type ())))))
->array_length_cvalues;
20991 if (_tmp300_ != NULL((void*)0)) {
20992 BalaCCodeExpression* _tmp301_;
20993 _tmp301_ = bala_ccode_base_module_get_array_length_cvalue (self, value, -1);
20994 _bala_ccode_node_unref0 (csizeexpr)((csizeexpr == ((void*)0)) ? ((void*)0) : (csizeexpr = (bala_ccode_node_unref
(csizeexpr), ((void*)0))))
;
20995 csizeexpr = _tmp301_;
20996 } else {
20997 if (bala_get_array_null_terminated (value)) {
20998 BalaCCodeFunctionCall* len_call = NULL((void*)0);
20999 BalaCCodeIdentifier* _tmp302_;
21000 BalaCCodeIdentifier* _tmp303_;
21001 BalaCCodeFunctionCall* _tmp304_;
21002 BalaCCodeFunctionCall* _tmp305_;
21003 BalaCCodeFunctionCall* _tmp306_;
21004 BalaCCodeExpression* _tmp307_;
21005 BalaCCodeFunctionCall* _tmp308_;
21006 BalaCCodeExpression* _tmp309_;
21007 self->requires_array_length = TRUE(!(0));
21008 _tmp302_ = bala_ccode_identifier_new ("_bala_array_length");
21009 _tmp303_ = _tmp302_;
21010 _tmp304_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp303_);
21011 _tmp305_ = _tmp304_;
21012 _bala_ccode_node_unref0 (_tmp303_)((_tmp303_ == ((void*)0)) ? ((void*)0) : (_tmp303_ = (bala_ccode_node_unref
(_tmp303_), ((void*)0))))
;
21013 len_call = _tmp305_;
21014 _tmp306_ = len_call;
21015 _tmp307_ = cvar;
21016 bala_ccode_function_call_add_argument (_tmp306_, _tmp307_);
21017 _tmp308_ = len_call;
21018 _tmp309_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp308_);
21019 _bala_ccode_node_unref0 (csizeexpr)((csizeexpr == ((void*)0)) ? ((void*)0) : (csizeexpr = (bala_ccode_node_unref
(csizeexpr), ((void*)0))))
;
21020 csizeexpr = _tmp309_;
21021 _bala_ccode_node_unref0 (len_call)((len_call == ((void*)0)) ? ((void*)0) : (len_call = (bala_ccode_node_unref
(len_call), ((void*)0))))
;
21022 } else {
21023 BalaCCodeExpression* _tmp310_;
21024 BalaCCodeExpression* _tmp311_;
21025 _tmp310_ = bala_get_array_length_cexpr (value);
21026 _tmp311_ = _bala_ccode_node_ref0 (_tmp310_);
21027 _bala_ccode_node_unref0 (csizeexpr)((csizeexpr == ((void*)0)) ? ((void*)0) : (csizeexpr = (bala_ccode_node_unref
(csizeexpr), ((void*)0))))
;
21028 csizeexpr = _tmp311_;
21029 }
21030 }
21031 _tmp312_ = csizeexpr;
21032 if (_tmp312_ != NULL((void*)0)) {
21033 BalaStruct* st = NULL((void*)0);
21034 BalaArrayType* _tmp313_;
21035 BalaDataType* _tmp314_;
21036 BalaDataType* _tmp315_;
21037 BalaTypeSymbol* _tmp316_;
21038 BalaTypeSymbol* _tmp317_;
21039 gboolean _tmp318_ = FALSE(0);
21040 BalaStruct* _tmp319_;
21041 _tmp313_ = array_type;
21042 _tmp314_ = bala_array_type_get_element_type (_tmp313_);
21043 _tmp315_ = _tmp314_;
21044 _tmp316_ = bala_data_type_get_type_symbol (_tmp315_);
21045 _tmp317_ = _tmp316_;
21046 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp317_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp317_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp317_) : NULL((void*)0);
21047 _tmp319_ = st;
21048 if (_tmp319_ != NULL((void*)0)) {
21049 BalaArrayType* _tmp320_;
21050 BalaDataType* _tmp321_;
21051 BalaDataType* _tmp322_;
21052 gboolean _tmp323_;
21053 gboolean _tmp324_;
21054 _tmp320_ = array_type;
21055 _tmp321_ = bala_array_type_get_element_type (_tmp320_);
21056 _tmp322_ = _tmp321_;
21057 _tmp323_ = bala_data_type_get_nullable (_tmp322_);
21058 _tmp324_ = _tmp323_;
21059 _tmp318_ = !_tmp324_;
21060 } else {
21061 _tmp318_ = FALSE(0);
21062 }
21063 if (_tmp318_) {
21064 BalaCCodeFunctionCall* _tmp325_;
21065 BalaStruct* _tmp326_;
21066 gchar* _tmp327_;
21067 gchar* _tmp328_;
21068 BalaCCodeIdentifier* _tmp329_;
21069 BalaCCodeIdentifier* _tmp330_;
21070 BalaCCodeFunctionCall* _tmp331_;
21071 BalaCCodeExpression* _tmp332_;
21072 _tmp325_ = ccall;
21073 _tmp326_ = st;
21074 _tmp327_ = bala_ccode_base_module_append_struct_array_free (self, _tmp326_);
21075 _tmp328_ = _tmp327_;
21076 _tmp329_ = bala_ccode_identifier_new (_tmp328_);
21077 _tmp330_ = _tmp329_;
21078 bala_ccode_function_call_set_call (_tmp325_, (BalaCCodeExpression*) _tmp330_);
21079 _bala_ccode_node_unref0 (_tmp330_)((_tmp330_ == ((void*)0)) ? ((void*)0) : (_tmp330_ = (bala_ccode_node_unref
(_tmp330_), ((void*)0))))
;
21080 _g_free0 (_tmp328_)(_tmp328_ = (g_free (_tmp328_), ((void*)0)));
21081 _tmp331_ = ccall;
21082 _tmp332_ = csizeexpr;
21083 bala_ccode_function_call_add_argument (_tmp331_, _tmp332_);
21084 } else {
21085 BalaDelegateType* _tmp333_;
21086 BalaCCodeFile* _tmp334_;
21087 BalaCCodeFunctionCall* _tmp335_;
21088 BalaCCodeIdentifier* _tmp336_;
21089 BalaCCodeIdentifier* _tmp337_;
21090 BalaCCodeFunctionCall* _tmp338_;
21091 BalaCCodeExpression* _tmp339_;
21092 BalaCCodeFunctionCall* _tmp340_;
21093 BalaArrayType* _tmp341_;
21094 BalaDataType* _tmp342_;
21095 BalaDataType* _tmp343_;
21096 BalaCCodeExpression* _tmp344_;
21097 BalaCCodeExpression* _tmp345_;
21098 BalaDelegateType* _tmp346_;
21099 gchar* _tmp347_;
21100 gchar* _tmp348_;
21101 BalaCCodeCastExpression* _tmp349_;
21102 BalaCCodeCastExpression* _tmp350_;
21103 self->requires_array_free = TRUE(!(0));
21104 _tmp333_ = self->delegate_target_destroy_type;
21105 _tmp334_ = self->cfile;
21106 bala_ccode_base_module_generate_type_declaration (self, (BalaDataType*) _tmp333_, _tmp334_);
21107 _tmp335_ = ccall;
21108 _tmp336_ = bala_ccode_identifier_new ("_bala_array_free");
21109 _tmp337_ = _tmp336_;
21110 bala_ccode_function_call_set_call (_tmp335_, (BalaCCodeExpression*) _tmp337_);
21111 _bala_ccode_node_unref0 (_tmp337_)((_tmp337_ == ((void*)0)) ? ((void*)0) : (_tmp337_ = (bala_ccode_node_unref
(_tmp337_), ((void*)0))))
;
21112 _tmp338_ = ccall;
21113 _tmp339_ = csizeexpr;
21114 bala_ccode_function_call_add_argument (_tmp338_, _tmp339_);
21115 _tmp340_ = ccall;
21116 _tmp341_ = array_type;
21117 _tmp342_ = bala_array_type_get_element_type (_tmp341_);
21118 _tmp343_ = _tmp342_;
21119 _tmp344_ = bala_ccode_base_module_get_destroy_func_expression (self, _tmp343_, FALSE(0));
21120 _tmp345_ = _tmp344_;
21121 _tmp346_ = self->delegate_target_destroy_type;
21122 _tmp347_ = bala_get_ccode_name ((BalaCodeNode*) _tmp346_);
21123 _tmp348_ = _tmp347_;
21124 _tmp349_ = bala_ccode_cast_expression_new (_tmp345_, _tmp348_);
21125 _tmp350_ = _tmp349_;
21126 bala_ccode_function_call_add_argument (_tmp340_, (BalaCCodeExpression*) _tmp350_);
21127 _bala_ccode_node_unref0 (_tmp350_)((_tmp350_ == ((void*)0)) ? ((void*)0) : (_tmp350_ = (bala_ccode_node_unref
(_tmp350_), ((void*)0))))
;
21128 _g_free0 (_tmp348_)(_tmp348_ = (g_free (_tmp348_), ((void*)0)));
21129 _bala_ccode_node_unref0 (_tmp345_)((_tmp345_ == ((void*)0)) ? ((void*)0) : (_tmp345_ = (bala_ccode_node_unref
(_tmp345_), ((void*)0))))
;
21130 }
21131 }
21132 _bala_ccode_node_unref0 (csizeexpr)((csizeexpr == ((void*)0)) ? ((void*)0) : (csizeexpr = (bala_ccode_node_unref
(csizeexpr), ((void*)0))))
;
21133 }
21134 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
21135 }
21136 }
21137 }
21138 _tmp351_ = ccomma;
21139 _tmp352_ = ccall;
21140 bala_ccode_comma_expression_append_expression (_tmp351_, (BalaCCodeExpression*) _tmp352_);
21141 _tmp353_ = ccomma;
21142 _tmp354_ = bala_ccode_constant_new ("NULL");
21143 _tmp355_ = _tmp354_;
21144 bala_ccode_comma_expression_append_expression (_tmp353_, (BalaCCodeExpression*) _tmp355_);
21145 _bala_ccode_node_unref0 (_tmp355_)((_tmp355_ == ((void*)0)) ? ((void*)0) : (_tmp355_ = (bala_ccode_node_unref
(_tmp355_), ((void*)0))))
;
21146 _tmp356_ = cvar;
21147 _tmp357_ = ccomma;
21148 _tmp358_ = bala_ccode_assignment_new (_tmp356_, (BalaCCodeExpression*) _tmp357_, BALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
21149 cassign = _tmp358_;
21150 _tmp361_ = type;
21151 _tmp362_ = bala_data_type_get_type_symbol (_tmp361_);
21152 _tmp363_ = _tmp362_;
21153 if (_tmp363_ != NULL((void*)0)) {
21154 BalaDataType* _tmp364_;
21155 BalaTypeSymbol* _tmp365_;
21156 BalaTypeSymbol* _tmp366_;
21157 _tmp364_ = type;
21158 _tmp365_ = bala_data_type_get_type_symbol (_tmp364_);
21159 _tmp366_ = _tmp365_;
21160 _tmp360_ = !bala_is_reference_counting (_tmp366_);
21161 } else {
21162 _tmp360_ = FALSE(0);
21163 }
21164 if (_tmp360_) {
21165 BalaDataType* _tmp367_;
21166 BalaTypeSymbol* _tmp368_;
21167 BalaTypeSymbol* _tmp369_;
21168 gchar* _tmp370_;
21169 gchar* _tmp371_;
21170 _tmp367_ = type;
21171 _tmp368_ = bala_data_type_get_type_symbol (_tmp367_);
21172 _tmp369_ = _tmp368_;
21173 _tmp370_ = bala_get_ccode_free_function (_tmp369_);
21174 _tmp371_ = _tmp370_;
21175 _tmp359_ = g_strcmp0 (_tmp371_, "g_free") == 0;
21176 _g_free0 (_tmp371_)(_tmp371_ = (g_free (_tmp371_), ((void*)0)));
21177 } else {
21178 _tmp359_ = FALSE(0);
21179 }
21180 uses_gfree = _tmp359_;
21181 if (uses_gfree) {
21182 _tmp372_ = TRUE(!(0));
21183 } else {
21184 BalaDataType* _tmp373_;
21185 _tmp373_ = type;
21186 _tmp372_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp373_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp373_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
21187 }
21188 uses_gfree = _tmp372_;
21189 if (uses_gfree) {
21190 result = (BalaCCodeExpression*) cassign;
21191 _bala_ccode_node_unref0 (ccomma)((ccomma == ((void*)0)) ? ((void*)0) : (ccomma = (bala_ccode_node_unref
(ccomma), ((void*)0))))
;
21192 _bala_ccode_node_unref0 (cisnull)((cisnull == ((void*)0)) ? ((void*)0) : (cisnull = (bala_ccode_node_unref
(cisnull), ((void*)0))))
;
21193 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
21194 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
21195 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
21196 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
21197 return result;
21198 }
21199 _tmp374_ = cisnull;
21200 _tmp375_ = bala_ccode_constant_new ("NULL");
21201 _tmp376_ = _tmp375_;
21202 _tmp377_ = cassign;
21203 _tmp378_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp374_, (BalaCCodeExpression*) _tmp376_, (BalaCCodeExpression*) _tmp377_);
21204 _tmp379_ = (BalaCCodeExpression*) _tmp378_;
21205 _bala_ccode_node_unref0 (_tmp376_)((_tmp376_ == ((void*)0)) ? ((void*)0) : (_tmp376_ = (bala_ccode_node_unref
(_tmp376_), ((void*)0))))
;
21206 result = _tmp379_;
21207 _bala_ccode_node_unref0 (cassign)((cassign == ((void*)0)) ? ((void*)0) : (cassign = (bala_ccode_node_unref
(cassign), ((void*)0))))
;
21208 _bala_ccode_node_unref0 (ccomma)((ccomma == ((void*)0)) ? ((void*)0) : (ccomma = (bala_ccode_node_unref
(ccomma), ((void*)0))))
;
21209 _bala_ccode_node_unref0 (cisnull)((cisnull == ((void*)0)) ? ((void*)0) : (cisnull = (bala_ccode_node_unref
(cisnull), ((void*)0))))
;
21210 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
21211 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
21212 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
21213 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
21214 return result;
21215}
21216
21217BalaCCodeExpression*
21218bala_ccode_base_module_destroy_value (BalaCCodeBaseModule* self,
21219 BalaTargetValue* value,
21220 gboolean is_macro_definition)
21221{
21222 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
21223 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->destroy_value (self, value, is_macro_definition);
21224}
21225
21226static void
21227bala_ccode_base_module_real_visit_end_full_expression (BalaCodeVisitor* base,
21228 BalaExpression* expr)
21229{
21230 BalaCCodeBaseModule * self;
21231 BalaArrayList* _tmp0_;
21232 BalaArrayList* _tmp1_;
21233 gint _tmp2_;
21234 gint _tmp3_;
21235 BalaLocalVariable* local_decl = NULL((void*)0);
21236 BalaCodeNode* _tmp4_;
21237 BalaCodeNode* _tmp5_;
21238 BalaLocalVariable* _tmp6_;
21239 gboolean _tmp7_ = FALSE(0);
21240 BalaLocalVariable* _tmp8_;
21241 BalaArrayList* _tmp32_;
21242 BalaArrayList* _tmp33_;
21243 self = (BalaCCodeBaseModule*) base;
21244 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
21245 _tmp0_ = bala_ccode_base_module_get_temp_ref_values (self);
21246 _tmp1_ = _tmp0_;
21247 _tmp2_ = bala_collection_get_size ((BalaCollection*) _tmp1_);
21248 _tmp3_ = _tmp2_;
21249 if (_tmp3_ == 0) {
21250 return;
21251 }
21252 _tmp4_ = bala_code_node_get_parent_node ((BalaCodeNode*) expr);
21253 _tmp5_ = _tmp4_;
21254 _tmp6_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, BALA_TYPE_LOCAL_VARIABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp5_); GType __t = ((bala_local_variable_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaLocalVariable*) _tmp5_) : NULL((void*)0));
21255 local_decl = _tmp6_;
21256 _tmp8_ = local_decl;
21257 if (_tmp8_ != NULL((void*)0)) {
21258 BalaLocalVariable* _tmp9_;
21259 BalaLocalVariable* _tmp10_;
21260 BalaExpression* _tmp11_;
21261 BalaExpression* _tmp12_;
21262 _tmp9_ = local_decl;
21263 _tmp10_ = local_decl;
21264 _tmp11_ = bala_variable_get_initializer ((BalaVariable*) _tmp10_);
21265 _tmp12_ = _tmp11_;
21266 _tmp7_ = bala_ccode_base_module_is_simple_struct_creation (self, (BalaVariable*) _tmp9_, _tmp12_);
21267 } else {
21268 _tmp7_ = FALSE(0);
21269 }
21270 if (!_tmp7_) {
21271 BalaTargetValue* _tmp13_;
21272 BalaTargetValue* _tmp14_;
21273 BalaTargetValue* _tmp15_;
21274 BalaTargetValue* _tmp16_;
21275 _tmp13_ = bala_expression_get_target_value (expr);
21276 _tmp14_ = _tmp13_;
21277 _tmp15_ = bala_ccode_base_module_store_temp_value (self, _tmp14_, (BalaCodeNode*) expr, NULL((void*)0));
21278 _tmp16_ = _tmp15_;
21279 bala_expression_set_target_value (expr, _tmp16_);
21280 _bala_target_value_unref0 (_tmp16_)((_tmp16_ == ((void*)0)) ? ((void*)0) : (_tmp16_ = (bala_target_value_unref
(_tmp16_), ((void*)0))))
;
21281 }
21282 {
21283 BalaArrayList* _value_list = NULL((void*)0);
21284 BalaArrayList* _tmp17_;
21285 BalaArrayList* _tmp18_;
21286 BalaArrayList* _tmp19_;
21287 gint _value_size = 0;
21288 BalaArrayList* _tmp20_;
21289 gint _tmp21_;
21290 gint _tmp22_;
21291 gint _value_index = 0;
21292 _tmp17_ = bala_ccode_base_module_get_temp_ref_values (self);
21293 _tmp18_ = _tmp17_;
21294 _tmp19_ = _bala_iterable_ref0 (_tmp18_);
21295 _value_list = _tmp19_;
21296 _tmp20_ = _value_list;
21297 _tmp21_ = bala_collection_get_size ((BalaCollection*) _tmp20_);
21298 _tmp22_ = _tmp21_;
21299 _value_size = _tmp22_;
21300 _value_index = -1;
21301 while (TRUE(!(0))) {
21302 gint _tmp23_;
21303 gint _tmp24_;
21304 BalaTargetValue* value = NULL((void*)0);
21305 BalaArrayList* _tmp25_;
21306 gpointer _tmp26_;
21307 BalaCCodeFunction* _tmp27_;
21308 BalaCCodeFunction* _tmp28_;
21309 BalaTargetValue* _tmp29_;
21310 BalaCCodeExpression* _tmp30_;
21311 BalaCCodeExpression* _tmp31_;
21312 _value_index = _value_index + 1;
21313 _tmp23_ = _value_index;
21314 _tmp24_ = _value_size;
21315 if (!(_tmp23_ < _tmp24_)) {
21316 break;
21317 }
21318 _tmp25_ = _value_list;
21319 _tmp26_ = bala_list_get ((BalaList*) _tmp25_, _value_index);
21320 value = (BalaTargetValue*) _tmp26_;
21321 _tmp27_ = bala_ccode_base_module_get_ccode (self);
21322 _tmp28_ = _tmp27_;
21323 _tmp29_ = value;
21324 _tmp30_ = bala_ccode_base_module_destroy_value (self, _tmp29_, FALSE(0));
21325 _tmp31_ = _tmp30_;
21326 bala_ccode_function_add_expression (_tmp28_, _tmp31_);
21327 _bala_ccode_node_unref0 (_tmp31_)((_tmp31_ == ((void*)0)) ? ((void*)0) : (_tmp31_ = (bala_ccode_node_unref
(_tmp31_), ((void*)0))))
;
21328 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
21329 }
21330 _bala_iterable_unref0 (_value_list)((_value_list == ((void*)0)) ? ((void*)0) : (_value_list = (bala_iterable_unref
(_value_list), ((void*)0))))
;
21331 }
21332 _tmp32_ = bala_ccode_base_module_get_temp_ref_values (self);
21333 _tmp33_ = _tmp32_;
21334 bala_collection_clear ((BalaCollection*) _tmp33_);
21335 _bala_code_node_unref0 (local_decl)((local_decl == ((void*)0)) ? ((void*)0) : (local_decl = (bala_code_node_unref
(local_decl), ((void*)0))))
;
21336}
21337
21338void
21339bala_ccode_base_module_emit_temp_var (BalaCCodeBaseModule* self,
21340 BalaLocalVariable* local,
21341 gboolean on_error)
21342{
21343 gboolean _tmp0_ = FALSE(0);
21344 const gchar* _tmp1_;
21345 const gchar* _tmp2_;
21346 gboolean init = FALSE(0);
21347 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
21348 g_return_if_fail (local != NULL)do { if ((local != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "local != NULL"
); return; } } while (0)
;
21349 _tmp1_ = bala_symbol_get_name ((BalaSymbol*) local);
21350 _tmp2_ = _tmp1_;
21351 if (!g_str_has_prefix (_tmp2_, "*")) {
21352 gboolean _tmp3_;
21353 gboolean _tmp4_;
21354 _tmp3_ = bala_local_variable_get_init (local);
21355 _tmp4_ = _tmp3_;
21356 _tmp0_ = _tmp4_;
21357 } else {
21358 _tmp0_ = FALSE(0);
21359 }
21360 init = _tmp0_;
21361 if (bala_ccode_base_module_is_in_coroutine (self)) {
21362 BalaCCodeStruct* _tmp5_;
21363 BalaDataType* _tmp6_;
21364 BalaDataType* _tmp7_;
21365 gchar* _tmp8_;
21366 gchar* _tmp9_;
21367 const gchar* _tmp10_;
21368 const gchar* _tmp11_;
21369 BalaDataType* _tmp12_;
21370 BalaDataType* _tmp13_;
21371 BalaCCodeDeclaratorSuffix* _tmp14_;
21372 BalaCCodeDeclaratorSuffix* _tmp15_;
21373 _tmp5_ = self->closure_struct;
21374 _tmp6_ = bala_variable_get_variable_type ((BalaVariable*) local);
21375 _tmp7_ = _tmp6_;
21376 _tmp8_ = bala_get_ccode_name ((BalaCodeNode*) _tmp7_);
21377 _tmp9_ = _tmp8_;
21378 _tmp10_ = bala_symbol_get_name ((BalaSymbol*) local);
21379 _tmp11_ = _tmp10_;
21380 _tmp12_ = bala_variable_get_variable_type ((BalaVariable*) local);
21381 _tmp13_ = _tmp12_;
21382 _tmp14_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp13_);
21383 _tmp15_ = _tmp14_;
21384 bala_ccode_struct_add_field (_tmp5_, _tmp9_, _tmp11_, 0, _tmp15_);
21385 _bala_ccode_declarator_suffix_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_declarator_suffix_unref
(_tmp15_), ((void*)0))))
;
21386 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
21387 if (init) {
21388 BalaCCodeExpression* initializer = NULL((void*)0);
21389 BalaDataType* _tmp16_;
21390 BalaDataType* _tmp17_;
21391 BalaCCodeExpression* _tmp18_;
21392 BalaCCodeExpression* _tmp19_;
21393 _tmp16_ = bala_variable_get_variable_type ((BalaVariable*) local);
21394 _tmp17_ = _tmp16_;
21395 _tmp18_ = bala_ccode_base_module_default_value_for_type (self, _tmp17_, FALSE(0), on_error);
21396 initializer = _tmp18_;
21397 _tmp19_ = initializer;
21398 if (_tmp19_ == NULL((void*)0)) {
21399 BalaCCodeFile* _tmp20_;
21400 BalaCCodeFunctionCall* memset_call = NULL((void*)0);
21401 BalaCCodeIdentifier* _tmp21_;
21402 BalaCCodeIdentifier* _tmp22_;
21403 BalaCCodeFunctionCall* _tmp23_;
21404 BalaCCodeFunctionCall* _tmp24_;
21405 BalaCCodeFunctionCall* _tmp25_;
21406 const gchar* _tmp26_;
21407 const gchar* _tmp27_;
21408 BalaCCodeExpression* _tmp28_;
21409 BalaCCodeExpression* _tmp29_;
21410 BalaCCodeUnaryExpression* _tmp30_;
21411 BalaCCodeUnaryExpression* _tmp31_;
21412 BalaCCodeFunctionCall* _tmp32_;
21413 BalaCCodeConstant* _tmp33_;
21414 BalaCCodeConstant* _tmp34_;
21415 BalaCCodeExpression* size = NULL((void*)0);
21416 BalaCCodeExpression* _tmp35_ = NULL((void*)0);
21417 BalaCCodeExpression* _tmp36_;
21418 BalaCCodeFunctionCall* _tmp44_;
21419 BalaCCodeExpression* _tmp45_;
21420 BalaCCodeFunction* _tmp46_;
21421 BalaCCodeFunction* _tmp47_;
21422 BalaCCodeFunctionCall* _tmp48_;
21423 _tmp20_ = self->cfile;
21424 bala_ccode_file_add_include (_tmp20_, "string.h", FALSE(0));
21425 _tmp21_ = bala_ccode_identifier_new ("memset");
21426 _tmp22_ = _tmp21_;
21427 _tmp23_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp22_);
21428 _tmp24_ = _tmp23_;
21429 _bala_ccode_node_unref0 (_tmp22_)((_tmp22_ == ((void*)0)) ? ((void*)0) : (_tmp22_ = (bala_ccode_node_unref
(_tmp22_), ((void*)0))))
;
21430 memset_call = _tmp24_;
21431 _tmp25_ = memset_call;
21432 _tmp26_ = bala_symbol_get_name ((BalaSymbol*) local);
21433 _tmp27_ = _tmp26_;
21434 _tmp28_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp27_);
21435 _tmp29_ = _tmp28_;
21436 _tmp30_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp29_);
21437 _tmp31_ = _tmp30_;
21438 bala_ccode_function_call_add_argument (_tmp25_, (BalaCCodeExpression*) _tmp31_);
21439 _bala_ccode_node_unref0 (_tmp31_)((_tmp31_ == ((void*)0)) ? ((void*)0) : (_tmp31_ = (bala_ccode_node_unref
(_tmp31_), ((void*)0))))
;
21440 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
21441 _tmp32_ = memset_call;
21442 _tmp33_ = bala_ccode_constant_new ("0");
21443 _tmp34_ = _tmp33_;
21444 bala_ccode_function_call_add_argument (_tmp32_, (BalaCCodeExpression*) _tmp34_);
21445 _bala_ccode_node_unref0 (_tmp34_)((_tmp34_ == ((void*)0)) ? ((void*)0) : (_tmp34_ = (bala_ccode_node_unref
(_tmp34_), ((void*)0))))
;
21446 size = NULL((void*)0);
21447 bala_ccode_base_module_requires_memset_init (self, (BalaVariable*) local, &_tmp35_);
21448 _bala_ccode_node_unref0 (size)((size == ((void*)0)) ? ((void*)0) : (size = (bala_ccode_node_unref
(size), ((void*)0))))
;
21449 size = _tmp35_;
21450 _tmp36_ = size;
21451 if (_tmp36_ == NULL((void*)0)) {
21452 BalaDataType* _tmp37_;
21453 BalaDataType* _tmp38_;
21454 gchar* _tmp39_;
21455 gchar* _tmp40_;
21456 gchar* _tmp41_;
21457 gchar* _tmp42_;
21458 BalaCCodeIdentifier* _tmp43_;
21459 _tmp37_ = bala_variable_get_variable_type ((BalaVariable*) local);
21460 _tmp38_ = _tmp37_;
21461 _tmp39_ = bala_get_ccode_name ((BalaCodeNode*) _tmp38_);
21462 _tmp40_ = _tmp39_;
21463 _tmp41_ = g_strdup_printf ("sizeof (%s)", _tmp40_);
21464 _tmp42_ = _tmp41_;
21465 _tmp43_ = bala_ccode_identifier_new (_tmp42_);
21466 _bala_ccode_node_unref0 (size)((size == ((void*)0)) ? ((void*)0) : (size = (bala_ccode_node_unref
(size), ((void*)0))))
;
21467 size = (BalaCCodeExpression*) _tmp43_;
21468 _g_free0 (_tmp42_)(_tmp42_ = (g_free (_tmp42_), ((void*)0)));
21469 _g_free0 (_tmp40_)(_tmp40_ = (g_free (_tmp40_), ((void*)0)));
21470 }
21471 _tmp44_ = memset_call;
21472 _tmp45_ = size;
21473 bala_ccode_function_call_add_argument (_tmp44_, _tmp45_);
21474 _tmp46_ = bala_ccode_base_module_get_ccode (self);
21475 _tmp47_ = _tmp46_;
21476 _tmp48_ = memset_call;
21477 bala_ccode_function_add_expression (_tmp47_, (BalaCCodeExpression*) _tmp48_);
21478 _bala_ccode_node_unref0 (size)((size == ((void*)0)) ? ((void*)0) : (size = (bala_ccode_node_unref
(size), ((void*)0))))
;
21479 _bala_ccode_node_unref0 (memset_call)((memset_call == ((void*)0)) ? ((void*)0) : (memset_call = (bala_ccode_node_unref
(memset_call), ((void*)0))))
;
21480 } else {
21481 BalaCCodeFunction* _tmp49_;
21482 BalaCCodeFunction* _tmp50_;
21483 const gchar* _tmp51_;
21484 const gchar* _tmp52_;
21485 BalaCCodeExpression* _tmp53_;
21486 BalaCCodeExpression* _tmp54_;
21487 BalaCCodeExpression* _tmp55_;
21488 _tmp49_ = bala_ccode_base_module_get_ccode (self);
21489 _tmp50_ = _tmp49_;
21490 _tmp51_ = bala_symbol_get_name ((BalaSymbol*) local);
21491 _tmp52_ = _tmp51_;
21492 _tmp53_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp52_);
21493 _tmp54_ = _tmp53_;
21494 _tmp55_ = initializer;
21495 bala_ccode_function_add_assignment (_tmp50_, _tmp54_, _tmp55_);
21496 _bala_ccode_node_unref0 (_tmp54_)((_tmp54_ == ((void*)0)) ? ((void*)0) : (_tmp54_ = (bala_ccode_node_unref
(_tmp54_), ((void*)0))))
;
21497 }
21498 _bala_ccode_node_unref0 (initializer)((initializer == ((void*)0)) ? ((void*)0) : (initializer = (bala_ccode_node_unref
(initializer), ((void*)0))))
;
21499 }
21500 } else {
21501 BalaCCodeVariableDeclarator* cvar = NULL((void*)0);
21502 const gchar* _tmp56_;
21503 const gchar* _tmp57_;
21504 BalaDataType* _tmp58_;
21505 BalaDataType* _tmp59_;
21506 BalaCCodeDeclaratorSuffix* _tmp60_;
21507 BalaCCodeDeclaratorSuffix* _tmp61_;
21508 BalaCCodeVariableDeclarator* _tmp62_;
21509 BalaCCodeVariableDeclarator* _tmp63_;
21510 BalaCCodeExpression* size = NULL((void*)0);
21511 gboolean _tmp64_ = FALSE(0);
21512 BalaCCodeFunction* _tmp96_;
21513 BalaCCodeFunction* _tmp97_;
21514 BalaDataType* _tmp98_;
21515 BalaDataType* _tmp99_;
21516 gchar* _tmp100_;
21517 gchar* _tmp101_;
21518 BalaCCodeVariableDeclarator* _tmp102_;
21519 _tmp56_ = bala_symbol_get_name ((BalaSymbol*) local);
21520 _tmp57_ = _tmp56_;
21521 _tmp58_ = bala_variable_get_variable_type ((BalaVariable*) local);
21522 _tmp59_ = _tmp58_;
21523 _tmp60_ = bala_ccode_base_module_get_ccode_declarator_suffix (self, _tmp59_);
21524 _tmp61_ = _tmp60_;
21525 _tmp62_ = bala_ccode_variable_declarator_new (_tmp57_, NULL((void*)0), _tmp61_);
21526 _tmp63_ = _tmp62_;
21527 _bala_ccode_declarator_suffix_unref0 (_tmp61_)((_tmp61_ == ((void*)0)) ? ((void*)0) : (_tmp61_ = (bala_ccode_declarator_suffix_unref
(_tmp61_), ((void*)0))))
;
21528 cvar = _tmp63_;
21529 size = NULL((void*)0);
21530 if (init) {
21531 BalaCCodeExpression* _tmp65_ = NULL((void*)0);
21532 gboolean _tmp66_;
21533 _tmp66_ = bala_ccode_base_module_requires_memset_init (self, (BalaVariable*) local, &_tmp65_);
21534 _bala_ccode_node_unref0 (size)((size == ((void*)0)) ? ((void*)0) : (size = (bala_ccode_node_unref
(size), ((void*)0))))
;
21535 size = _tmp65_;
21536 _tmp64_ = !_tmp66_;
21537 } else {
21538 _tmp64_ = FALSE(0);
21539 }
21540 if (_tmp64_) {
21541 BalaCCodeVariableDeclarator* _tmp67_;
21542 BalaDataType* _tmp68_;
21543 BalaDataType* _tmp69_;
21544 BalaCCodeExpression* _tmp70_;
21545 BalaCCodeExpression* _tmp71_;
21546 BalaCCodeVariableDeclarator* _tmp72_;
21547 _tmp67_ = cvar;
21548 _tmp68_ = bala_variable_get_variable_type ((BalaVariable*) local);
21549 _tmp69_ = _tmp68_;
21550 _tmp70_ = bala_ccode_base_module_default_value_for_type (self, _tmp69_, TRUE(!(0)), on_error);
21551 _tmp71_ = _tmp70_;
21552 bala_ccode_variable_declarator_set_initializer (_tmp67_, _tmp71_);
21553 _bala_ccode_node_unref0 (_tmp71_)((_tmp71_ == ((void*)0)) ? ((void*)0) : (_tmp71_ = (bala_ccode_node_unref
(_tmp71_), ((void*)0))))
;
21554 _tmp72_ = cvar;
21555 bala_ccode_variable_declarator_set_init0 (_tmp72_, TRUE(!(0)));
21556 } else {
21557 gboolean _tmp73_ = FALSE(0);
21558 gboolean _tmp74_ = FALSE(0);
21559 if (init) {
21560 BalaCCodeExpression* _tmp75_;
21561 _tmp75_ = size;
21562 _tmp74_ = _tmp75_ != NULL((void*)0);
21563 } else {
21564 _tmp74_ = FALSE(0);
21565 }
21566 if (_tmp74_) {
21567 BalaExpression* _tmp76_;
21568 BalaExpression* _tmp77_;
21569 _tmp76_ = bala_variable_get_initializer ((BalaVariable*) local);
21570 _tmp77_ = _tmp76_;
21571 _tmp73_ = _tmp77_ == NULL((void*)0);
21572 } else {
21573 _tmp73_ = FALSE(0);
21574 }
21575 if (_tmp73_) {
21576 BalaCCodeFile* _tmp78_;
21577 BalaCCodeFunctionCall* memset_call = NULL((void*)0);
21578 BalaCCodeIdentifier* _tmp79_;
21579 BalaCCodeIdentifier* _tmp80_;
21580 BalaCCodeFunctionCall* _tmp81_;
21581 BalaCCodeFunctionCall* _tmp82_;
21582 BalaCCodeFunctionCall* _tmp83_;
21583 const gchar* _tmp84_;
21584 const gchar* _tmp85_;
21585 BalaCCodeExpression* _tmp86_;
21586 BalaCCodeExpression* _tmp87_;
21587 BalaCCodeFunctionCall* _tmp88_;
21588 BalaCCodeConstant* _tmp89_;
21589 BalaCCodeConstant* _tmp90_;
21590 BalaCCodeFunctionCall* _tmp91_;
21591 BalaCCodeExpression* _tmp92_;
21592 BalaCCodeFunction* _tmp93_;
21593 BalaCCodeFunction* _tmp94_;
21594 BalaCCodeFunctionCall* _tmp95_;
21595 _tmp78_ = self->cfile;
21596 bala_ccode_file_add_include (_tmp78_, "string.h", FALSE(0));
21597 _tmp79_ = bala_ccode_identifier_new ("memset");
21598 _tmp80_ = _tmp79_;
21599 _tmp81_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp80_);
21600 _tmp82_ = _tmp81_;
21601 _bala_ccode_node_unref0 (_tmp80_)((_tmp80_ == ((void*)0)) ? ((void*)0) : (_tmp80_ = (bala_ccode_node_unref
(_tmp80_), ((void*)0))))
;
21602 memset_call = _tmp82_;
21603 _tmp83_ = memset_call;
21604 _tmp84_ = bala_symbol_get_name ((BalaSymbol*) local);
21605 _tmp85_ = _tmp84_;
21606 _tmp86_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp85_);
21607 _tmp87_ = _tmp86_;
21608 bala_ccode_function_call_add_argument (_tmp83_, _tmp87_);
21609 _bala_ccode_node_unref0 (_tmp87_)((_tmp87_ == ((void*)0)) ? ((void*)0) : (_tmp87_ = (bala_ccode_node_unref
(_tmp87_), ((void*)0))))
;
21610 _tmp88_ = memset_call;
21611 _tmp89_ = bala_ccode_constant_new ("0");
21612 _tmp90_ = _tmp89_;
21613 bala_ccode_function_call_add_argument (_tmp88_, (BalaCCodeExpression*) _tmp90_);
21614 _bala_ccode_node_unref0 (_tmp90_)((_tmp90_ == ((void*)0)) ? ((void*)0) : (_tmp90_ = (bala_ccode_node_unref
(_tmp90_), ((void*)0))))
;
21615 _tmp91_ = memset_call;
21616 _tmp92_ = size;
21617 bala_ccode_function_call_add_argument (_tmp91_, _tmp92_);
21618 _tmp93_ = bala_ccode_base_module_get_ccode (self);
21619 _tmp94_ = _tmp93_;
21620 _tmp95_ = memset_call;
21621 bala_ccode_function_add_expression (_tmp94_, (BalaCCodeExpression*) _tmp95_);
21622 _bala_ccode_node_unref0 (memset_call)((memset_call == ((void*)0)) ? ((void*)0) : (memset_call = (bala_ccode_node_unref
(memset_call), ((void*)0))))
;
21623 }
21624 }
21625 _tmp96_ = bala_ccode_base_module_get_ccode (self);
21626 _tmp97_ = _tmp96_;
21627 _tmp98_ = bala_variable_get_variable_type ((BalaVariable*) local);
21628 _tmp99_ = _tmp98_;
21629 _tmp100_ = bala_get_ccode_name ((BalaCodeNode*) _tmp99_);
21630 _tmp101_ = _tmp100_;
21631 _tmp102_ = cvar;
21632 bala_ccode_function_add_declaration (_tmp97_, _tmp101_, (BalaCCodeDeclarator*) _tmp102_, 0);
21633 _g_free0 (_tmp101_)(_tmp101_ = (g_free (_tmp101_), ((void*)0)));
21634 _bala_ccode_node_unref0 (size)((size == ((void*)0)) ? ((void*)0) : (size = (bala_ccode_node_unref
(size), ((void*)0))))
;
21635 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
21636 }
21637}
21638
21639static void
21640bala_ccode_base_module_real_visit_expression_statement (BalaCodeVisitor* base,
21641 BalaExpressionStatement* stmt)
21642{
21643 BalaCCodeBaseModule * self;
21644 BalaExpression* _tmp0_;
21645 BalaExpression* _tmp1_;
21646 gboolean _tmp2_;
21647 gboolean _tmp3_;
21648 gboolean _tmp19_ = FALSE(0);
21649 gboolean _tmp20_;
21650 gboolean _tmp21_;
21651 BalaArrayList* _tmp28_;
21652 BalaArrayList* _tmp29_;
21653 self = (BalaCCodeBaseModule*) base;
21654 g_return_if_fail (stmt != NULL)do { if ((stmt != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "stmt != NULL"
); return; } } while (0)
;
21655 _tmp0_ = bala_expression_statement_get_expression (stmt);
21656 _tmp1_ = _tmp0_;
21657 _tmp2_ = bala_code_node_get_error ((BalaCodeNode*) _tmp1_);
21658 _tmp3_ = _tmp2_;
21659 if (_tmp3_) {
21660 bala_code_node_set_error ((BalaCodeNode*) stmt, TRUE(!(0)));
21661 return;
21662 }
21663 {
21664 BalaArrayList* _value_list = NULL((void*)0);
21665 BalaArrayList* _tmp4_;
21666 BalaArrayList* _tmp5_;
21667 BalaArrayList* _tmp6_;
21668 gint _value_size = 0;
21669 BalaArrayList* _tmp7_;
21670 gint _tmp8_;
21671 gint _tmp9_;
21672 gint _value_index = 0;
21673 _tmp4_ = bala_ccode_base_module_get_temp_ref_values (self);
21674 _tmp5_ = _tmp4_;
21675 _tmp6_ = _bala_iterable_ref0 (_tmp5_);
21676 _value_list = _tmp6_;
21677 _tmp7_ = _value_list;
21678 _tmp8_ = bala_collection_get_size ((BalaCollection*) _tmp7_);
21679 _tmp9_ = _tmp8_;
21680 _value_size = _tmp9_;
21681 _value_index = -1;
21682 while (TRUE(!(0))) {
21683 gint _tmp10_;
21684 gint _tmp11_;
21685 BalaTargetValue* value = NULL((void*)0);
21686 BalaArrayList* _tmp12_;
21687 gpointer _tmp13_;
21688 BalaCCodeFunction* _tmp14_;
21689 BalaCCodeFunction* _tmp15_;
21690 BalaTargetValue* _tmp16_;
21691 BalaCCodeExpression* _tmp17_;
21692 BalaCCodeExpression* _tmp18_;
21693 _value_index = _value_index + 1;
21694 _tmp10_ = _value_index;
21695 _tmp11_ = _value_size;
21696 if (!(_tmp10_ < _tmp11_)) {
21697 break;
21698 }
21699 _tmp12_ = _value_list;
21700 _tmp13_ = bala_list_get ((BalaList*) _tmp12_, _value_index);
21701 value = (BalaTargetValue*) _tmp13_;
21702 _tmp14_ = bala_ccode_base_module_get_ccode (self);
21703 _tmp15_ = _tmp14_;
21704 _tmp16_ = value;
21705 _tmp17_ = bala_ccode_base_module_destroy_value (self, _tmp16_, FALSE(0));
21706 _tmp18_ = _tmp17_;
21707 bala_ccode_function_add_expression (_tmp15_, _tmp18_);
21708 _bala_ccode_node_unref0 (_tmp18_)((_tmp18_ == ((void*)0)) ? ((void*)0) : (_tmp18_ = (bala_ccode_node_unref
(_tmp18_), ((void*)0))))
;
21709 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
21710 }
21711 _bala_iterable_unref0 (_value_list)((_value_list == ((void*)0)) ? ((void*)0) : (_value_list = (bala_iterable_unref
(_value_list), ((void*)0))))
;
21712 }
21713 _tmp20_ = bala_code_node_get_tree_can_fail ((BalaCodeNode*) stmt);
21714 _tmp21_ = _tmp20_;
21715 if (_tmp21_) {
21716 BalaExpression* _tmp22_;
21717 BalaExpression* _tmp23_;
21718 gboolean _tmp24_;
21719 gboolean _tmp25_;
21720 _tmp22_ = bala_expression_statement_get_expression (stmt);
21721 _tmp23_ = _tmp22_;
21722 _tmp24_ = bala_code_node_get_tree_can_fail ((BalaCodeNode*) _tmp23_);
21723 _tmp25_ = _tmp24_;
21724 _tmp19_ = _tmp25_;
21725 } else {
21726 _tmp19_ = FALSE(0);
21727 }
21728 if (_tmp19_) {
21729 BalaExpression* _tmp26_;
21730 BalaExpression* _tmp27_;
21731 _tmp26_ = bala_expression_statement_get_expression (stmt);
21732 _tmp27_ = _tmp26_;
21733 bala_ccode_base_module_add_simple_check (self, (BalaCodeNode*) _tmp27_, FALSE(0));
21734 }
21735 _tmp28_ = bala_ccode_base_module_get_temp_ref_values (self);
21736 _tmp29_ = _tmp28_;
21737 bala_collection_clear ((BalaCollection*) _tmp29_);
21738}
21739
21740static void
21741bala_ccode_base_module_real_append_scope_free (BalaCCodeBaseModule* self,
21742 BalaSymbol* sym,
21743 BalaCodeNode* stop_at)
21744{
21745 BalaBlock* b = NULL((void*)0);
21746 BalaBlock* _tmp0_;
21747 BalaList* local_vars = NULL((void*)0);
21748 BalaBlock* _tmp1_;
21749 BalaList* _tmp2_;
21750 BalaList* _tmp3_;
21751 BalaBlock* _tmp31_;
21752 gboolean _tmp32_;
21753 gboolean _tmp33_;
21754 g_return_if_fail (sym != NULL)do { if ((sym != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "sym != NULL")
; return; } } while (0)
;
21755 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (sym, BALA_TYPE_BLOCK, BalaBlock)(((BalaBlock*) g_type_check_instance_cast ((GTypeInstance*) (
sym), ((bala_block_get_type ())))))
);
21756 b = _tmp0_;
21757 _tmp1_ = b;
21758 _tmp2_ = bala_block_get_local_variables (_tmp1_);
21759 _tmp3_ = _bala_iterable_ref0 (_tmp2_);
21760 local_vars = _tmp3_;
21761 {
21762 gint i = 0;
21763 BalaList* _tmp4_;
21764 gint _tmp5_;
21765 gint _tmp6_;
21766 _tmp4_ = local_vars;
21767 _tmp5_ = bala_collection_get_size ((BalaCollection*) _tmp4_);
21768 _tmp6_ = _tmp5_;
21769 i = _tmp6_ - 1;
21770 {
21771 gboolean _tmp7_ = FALSE(0);
21772 _tmp7_ = TRUE(!(0));
21773 while (TRUE(!(0))) {
21774 BalaLocalVariable* local = NULL((void*)0);
21775 BalaList* _tmp9_;
21776 gpointer _tmp10_;
21777 gboolean _tmp11_ = FALSE(0);
21778 gboolean _tmp12_ = FALSE(0);
21779 gboolean _tmp13_ = FALSE(0);
21780 BalaLocalVariable* _tmp14_;
21781 gboolean _tmp15_;
21782 gboolean _tmp16_;
21783 if (!_tmp7_) {
21784 gint _tmp8_;
21785 _tmp8_ = i;
21786 i = _tmp8_ - 1;
21787 }
21788 _tmp7_ = FALSE(0);
21789 if (!(i >= 0)) {
21790 break;
21791 }
21792 _tmp9_ = local_vars;
21793 _tmp10_ = bala_list_get (_tmp9_, i);
21794 local = (BalaLocalVariable*) _tmp10_;
21795 _tmp14_ = local;
21796 _tmp15_ = bala_code_node_get_unreachable ((BalaCodeNode*) _tmp14_);
21797 _tmp16_ = _tmp15_;
21798 if (!_tmp16_) {
21799 BalaLocalVariable* _tmp17_;
21800 gboolean _tmp18_;
21801 gboolean _tmp19_;
21802 _tmp17_ = local;
21803 _tmp18_ = bala_symbol_get_active ((BalaSymbol*) _tmp17_);
21804 _tmp19_ = _tmp18_;
21805 _tmp13_ = _tmp19_;
21806 } else {
21807 _tmp13_ = FALSE(0);
21808 }
21809 if (_tmp13_) {
21810 BalaLocalVariable* _tmp20_;
21811 gboolean _tmp21_;
21812 gboolean _tmp22_;
21813 _tmp20_ = local;
21814 _tmp21_ = bala_local_variable_get_captured (_tmp20_);
21815 _tmp22_ = _tmp21_;
21816 _tmp12_ = !_tmp22_;
21817 } else {
21818 _tmp12_ = FALSE(0);
21819 }
21820 if (_tmp12_) {
21821 BalaLocalVariable* _tmp23_;
21822 BalaDataType* _tmp24_;
21823 BalaDataType* _tmp25_;
21824 _tmp23_ = local;
21825 _tmp24_ = bala_variable_get_variable_type ((BalaVariable*) _tmp23_);
21826 _tmp25_ = _tmp24_;
21827 _tmp11_ = bala_ccode_base_module_requires_destroy (_tmp25_);
21828 } else {
21829 _tmp11_ = FALSE(0);
21830 }
21831 if (_tmp11_) {
21832 BalaCCodeFunction* _tmp26_;
21833 BalaCCodeFunction* _tmp27_;
21834 BalaLocalVariable* _tmp28_;
21835 BalaCCodeExpression* _tmp29_;
21836 BalaCCodeExpression* _tmp30_;
21837 _tmp26_ = bala_ccode_base_module_get_ccode (self);
21838 _tmp27_ = _tmp26_;
21839 _tmp28_ = local;
21840 _tmp29_ = bala_ccode_base_module_destroy_local (self, _tmp28_);
21841 _tmp30_ = _tmp29_;
21842 bala_ccode_function_add_expression (_tmp27_, _tmp30_);
21843 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
21844 }
21845 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
21846 }
21847 }
21848 }
21849 _tmp31_ = b;
21850 _tmp32_ = bala_block_get_captured (_tmp31_);
21851 _tmp33_ = _tmp32_;
21852 if (_tmp33_) {
21853 gint block_id = 0;
21854 BalaBlock* _tmp34_;
21855 BalaCCodeFunctionCall* data_unref = NULL((void*)0);
21856 gchar* _tmp35_;
21857 gchar* _tmp36_;
21858 BalaCCodeIdentifier* _tmp37_;
21859 BalaCCodeIdentifier* _tmp38_;
21860 BalaCCodeFunctionCall* _tmp39_;
21861 BalaCCodeFunctionCall* _tmp40_;
21862 BalaCCodeFunctionCall* _tmp41_;
21863 gchar* _tmp42_;
21864 gchar* _tmp43_;
21865 BalaCCodeExpression* _tmp44_;
21866 BalaCCodeExpression* _tmp45_;
21867 BalaCCodeFunction* _tmp46_;
21868 BalaCCodeFunction* _tmp47_;
21869 BalaCCodeFunctionCall* _tmp48_;
21870 BalaCCodeFunction* _tmp49_;
21871 BalaCCodeFunction* _tmp50_;
21872 gchar* _tmp51_;
21873 gchar* _tmp52_;
21874 BalaCCodeExpression* _tmp53_;
21875 BalaCCodeExpression* _tmp54_;
21876 BalaCCodeConstant* _tmp55_;
21877 BalaCCodeConstant* _tmp56_;
21878 _tmp34_ = b;
21879 block_id = bala_ccode_base_module_get_block_id (self, _tmp34_);
21880 _tmp35_ = g_strdup_printf ("block%d_data_unref", block_id);
21881 _tmp36_ = _tmp35_;
21882 _tmp37_ = bala_ccode_identifier_new (_tmp36_);
21883 _tmp38_ = _tmp37_;
21884 _tmp39_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp38_);
21885 _tmp40_ = _tmp39_;
21886 _bala_ccode_node_unref0 (_tmp38_)((_tmp38_ == ((void*)0)) ? ((void*)0) : (_tmp38_ = (bala_ccode_node_unref
(_tmp38_), ((void*)0))))
;
21887 _g_free0 (_tmp36_)(_tmp36_ = (g_free (_tmp36_), ((void*)0)));
21888 data_unref = _tmp40_;
21889 _tmp41_ = data_unref;
21890 _tmp42_ = g_strdup_printf ("_data%d_", block_id);
21891 _tmp43_ = _tmp42_;
21892 _tmp44_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp43_);
21893 _tmp45_ = _tmp44_;
21894 bala_ccode_function_call_add_argument (_tmp41_, _tmp45_);
21895 _bala_ccode_node_unref0 (_tmp45_)((_tmp45_ == ((void*)0)) ? ((void*)0) : (_tmp45_ = (bala_ccode_node_unref
(_tmp45_), ((void*)0))))
;
21896 _g_free0 (_tmp43_)(_tmp43_ = (g_free (_tmp43_), ((void*)0)));
21897 _tmp46_ = bala_ccode_base_module_get_ccode (self);
21898 _tmp47_ = _tmp46_;
21899 _tmp48_ = data_unref;
21900 bala_ccode_function_add_expression (_tmp47_, (BalaCCodeExpression*) _tmp48_);
21901 _tmp49_ = bala_ccode_base_module_get_ccode (self);
21902 _tmp50_ = _tmp49_;
21903 _tmp51_ = g_strdup_printf ("_data%d_", block_id);
21904 _tmp52_ = _tmp51_;
21905 _tmp53_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp52_);
21906 _tmp54_ = _tmp53_;
21907 _tmp55_ = bala_ccode_constant_new ("NULL");
21908 _tmp56_ = _tmp55_;
21909 bala_ccode_function_add_assignment (_tmp50_, _tmp54_, (BalaCCodeExpression*) _tmp56_);
21910 _bala_ccode_node_unref0 (_tmp56_)((_tmp56_ == ((void*)0)) ? ((void*)0) : (_tmp56_ = (bala_ccode_node_unref
(_tmp56_), ((void*)0))))
;
21911 _bala_ccode_node_unref0 (_tmp54_)((_tmp54_ == ((void*)0)) ? ((void*)0) : (_tmp54_ = (bala_ccode_node_unref
(_tmp54_), ((void*)0))))
;
21912 _g_free0 (_tmp52_)(_tmp52_ = (g_free (_tmp52_), ((void*)0)));
21913 _bala_ccode_node_unref0 (data_unref)((data_unref == ((void*)0)) ? ((void*)0) : (data_unref = (bala_ccode_node_unref
(data_unref), ((void*)0))))
;
21914 }
21915 _bala_iterable_unref0 (local_vars)((local_vars == ((void*)0)) ? ((void*)0) : (local_vars = (bala_iterable_unref
(local_vars), ((void*)0))))
;
21916 _bala_code_node_unref0 (b)((b == ((void*)0)) ? ((void*)0) : (b = (bala_code_node_unref (
b), ((void*)0))))
;
21917}
21918
21919void
21920bala_ccode_base_module_append_scope_free (BalaCCodeBaseModule* self,
21921 BalaSymbol* sym,
21922 BalaCodeNode* stop_at)
21923{
21924 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
21925 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->append_scope_free (self, sym, stop_at);
21926}
21927
21928void
21929bala_ccode_base_module_append_local_free (BalaCCodeBaseModule* self,
21930 BalaSymbol* sym,
21931 BalaStatement* jump_stmt,
21932 BalaCodeNode* stop_at)
21933{
21934 BalaBlock* b = NULL((void*)0);
21935 BalaBlock* _tmp0_;
21936 gboolean _tmp19_ = FALSE(0);
21937 BalaSymbol* _tmp23_;
21938 BalaSymbol* _tmp24_;
21939 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
21940 g_return_if_fail (sym != NULL)do { if ((sym != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "sym != NULL")
; return; } } while (0)
;
21941 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (sym, BALA_TYPE_BLOCK, BalaBlock)(((BalaBlock*) g_type_check_instance_cast ((GTypeInstance*) (
sym), ((bala_block_get_type ())))))
);
21942 b = _tmp0_;
21943 bala_ccode_base_module_append_scope_free (self, sym, stop_at);
21944 if (G_TYPE_CHECK_INSTANCE_TYPE (jump_stmt, BALA_TYPE_BREAK_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
jump_stmt); GType __t = ((bala_break_statement_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
21945 gboolean _tmp1_ = FALSE(0);
21946 gboolean _tmp2_ = FALSE(0);
21947 BalaBlock* _tmp3_;
21948 BalaCodeNode* _tmp4_;
21949 BalaCodeNode* _tmp5_;
21950 _tmp3_ = b;
21951 _tmp4_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp3_);
21952 _tmp5_ = _tmp4_;
21953 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, BALA_TYPE_LOOP)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp5_); GType __t = ((bala_loop_get_type ())); gboolean __r;
if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
21954 _tmp2_ = TRUE(!(0));
21955 } else {
21956 BalaBlock* _tmp6_;
21957 BalaCodeNode* _tmp7_;
21958 BalaCodeNode* _tmp8_;
21959 _tmp6_ = b;
21960 _tmp7_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp6_);
21961 _tmp8_ = _tmp7_;
21962 _tmp2_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_FOREACH_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_foreach_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
21963 }
21964 if (_tmp2_) {
21965 _tmp1_ = TRUE(!(0));
21966 } else {
21967 BalaBlock* _tmp9_;
21968 BalaCodeNode* _tmp10_;
21969 BalaCodeNode* _tmp11_;
21970 _tmp9_ = b;
21971 _tmp10_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp9_);
21972 _tmp11_ = _tmp10_;
21973 _tmp1_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, BALA_TYPE_SWITCH_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp11_); GType __t = ((bala_switch_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
21974 }
21975 if (_tmp1_) {
21976 _bala_code_node_unref0 (b)((b == ((void*)0)) ? ((void*)0) : (b = (bala_code_node_unref (
b), ((void*)0))))
;
21977 return;
21978 }
21979 } else {
21980 if (G_TYPE_CHECK_INSTANCE_TYPE (jump_stmt, BALA_TYPE_CONTINUE_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
jump_stmt); GType __t = ((bala_continue_statement_get_type ()
)); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
21981 gboolean _tmp12_ = FALSE(0);
21982 BalaBlock* _tmp13_;
21983 BalaCodeNode* _tmp14_;
21984 BalaCodeNode* _tmp15_;
21985 _tmp13_ = b;
21986 _tmp14_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp13_);
21987 _tmp15_ = _tmp14_;
21988 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, BALA_TYPE_LOOP)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp15_); GType __t = ((bala_loop_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
21989 _tmp12_ = TRUE(!(0));
21990 } else {
21991 BalaBlock* _tmp16_;
21992 BalaCodeNode* _tmp17_;
21993 BalaCodeNode* _tmp18_;
21994 _tmp16_ = b;
21995 _tmp17_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp16_);
21996 _tmp18_ = _tmp17_;
21997 _tmp12_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, BALA_TYPE_FOREACH_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp18_); GType __t = ((bala_foreach_statement_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
;
21998 }
21999 if (_tmp12_) {
22000 _bala_code_node_unref0 (b)((b == ((void*)0)) ? ((void*)0) : (b = (bala_code_node_unref (
b), ((void*)0))))
;
22001 return;
22002 }
22003 }
22004 }
22005 if (stop_at != NULL((void*)0)) {
22006 BalaBlock* _tmp20_;
22007 BalaCodeNode* _tmp21_;
22008 BalaCodeNode* _tmp22_;
22009 _tmp20_ = b;
22010 _tmp21_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp20_);
22011 _tmp22_ = _tmp21_;
22012 _tmp19_ = _tmp22_ == stop_at;
22013 } else {
22014 _tmp19_ = FALSE(0);
22015 }
22016 if (_tmp19_) {
22017 _bala_code_node_unref0 (b)((b == ((void*)0)) ? ((void*)0) : (b = (bala_code_node_unref (
b), ((void*)0))))
;
22018 return;
22019 }
22020 _tmp23_ = bala_symbol_get_parent_symbol (sym);
22021 _tmp24_ = _tmp23_;
22022 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, BALA_TYPE_BLOCK)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp24_); GType __t = ((bala_block_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
22023 BalaSymbol* _tmp25_;
22024 BalaSymbol* _tmp26_;
22025 _tmp25_ = bala_symbol_get_parent_symbol (sym);
22026 _tmp26_ = _tmp25_;
22027 bala_ccode_base_module_append_local_free (self, _tmp26_, jump_stmt, stop_at);
22028 } else {
22029 BalaSymbol* _tmp27_;
22030 BalaSymbol* _tmp28_;
22031 _tmp27_ = bala_symbol_get_parent_symbol (sym);
22032 _tmp28_ = _tmp27_;
22033 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp28_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp28_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
22034 BalaSymbol* _tmp29_;
22035 BalaSymbol* _tmp30_;
22036 _tmp29_ = bala_symbol_get_parent_symbol (sym);
22037 _tmp30_ = _tmp29_;
22038 bala_ccode_base_module_append_param_free (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp30_, BALA_TYPE_METHOD, BalaMethod)(((BalaMethod*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp30_), ((bala_method_get_type ())))))
);
22039 } else {
22040 BalaSymbol* _tmp31_;
22041 BalaSymbol* _tmp32_;
22042 _tmp31_ = bala_symbol_get_parent_symbol (sym);
22043 _tmp32_ = _tmp31_;
22044 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp32_, BALA_TYPE_PROPERTY_ACCESSOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp32_); GType __t = ((bala_property_accessor_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
22045 BalaPropertyAccessor* acc = NULL((void*)0);
22046 BalaSymbol* _tmp33_;
22047 BalaSymbol* _tmp34_;
22048 BalaPropertyAccessor* _tmp35_;
22049 gboolean _tmp36_ = FALSE(0);
22050 BalaPropertyAccessor* _tmp37_;
22051 BalaParameter* _tmp38_;
22052 BalaParameter* _tmp39_;
22053 _tmp33_ = bala_symbol_get_parent_symbol (sym);
22054 _tmp34_ = _tmp33_;
22055 _tmp35_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, BALA_TYPE_PROPERTY_ACCESSOR, BalaPropertyAccessor)(((BalaPropertyAccessor*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp34_), ((bala_property_accessor_get_type ())))))
);
22056 acc = _tmp35_;
22057 _tmp37_ = acc;
22058 _tmp38_ = bala_property_accessor_get_value_parameter (_tmp37_);
22059 _tmp39_ = _tmp38_;
22060 if (_tmp39_ != NULL((void*)0)) {
22061 BalaPropertyAccessor* _tmp40_;
22062 BalaParameter* _tmp41_;
22063 BalaParameter* _tmp42_;
22064 BalaDataType* _tmp43_;
22065 BalaDataType* _tmp44_;
22066 _tmp40_ = acc;
22067 _tmp41_ = bala_property_accessor_get_value_parameter (_tmp40_);
22068 _tmp42_ = _tmp41_;
22069 _tmp43_ = bala_variable_get_variable_type ((BalaVariable*) _tmp42_);
22070 _tmp44_ = _tmp43_;
22071 _tmp36_ = bala_ccode_base_module_requires_destroy (_tmp44_);
22072 } else {
22073 _tmp36_ = FALSE(0);
22074 }
22075 if (_tmp36_) {
22076 BalaCCodeFunction* _tmp45_;
22077 BalaCCodeFunction* _tmp46_;
22078 BalaPropertyAccessor* _tmp47_;
22079 BalaParameter* _tmp48_;
22080 BalaParameter* _tmp49_;
22081 BalaCCodeExpression* _tmp50_;
22082 BalaCCodeExpression* _tmp51_;
22083 _tmp45_ = bala_ccode_base_module_get_ccode (self);
22084 _tmp46_ = _tmp45_;
22085 _tmp47_ = acc;
22086 _tmp48_ = bala_property_accessor_get_value_parameter (_tmp47_);
22087 _tmp49_ = _tmp48_;
22088 _tmp50_ = bala_ccode_base_module_destroy_parameter (self, _tmp49_);
22089 _tmp51_ = _tmp50_;
22090 bala_ccode_function_add_expression (_tmp46_, _tmp51_);
22091 _bala_ccode_node_unref0 (_tmp51_)((_tmp51_ == ((void*)0)) ? ((void*)0) : (_tmp51_ = (bala_ccode_node_unref
(_tmp51_), ((void*)0))))
;
22092 }
22093 _bala_code_node_unref0 (acc)((acc == ((void*)0)) ? ((void*)0) : (acc = (bala_code_node_unref
(acc), ((void*)0))))
;
22094 }
22095 }
22096 }
22097 _bala_code_node_unref0 (b)((b == ((void*)0)) ? ((void*)0) : (b = (bala_code_node_unref (
b), ((void*)0))))
;
22098}
22099
22100static void
22101bala_ccode_base_module_append_param_free (BalaCCodeBaseModule* self,
22102 BalaMethod* m)
22103{
22104 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
22105 g_return_if_fail (m != NULL)do { if ((m != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "m != NULL"); return
; } } while (0)
;
22106 {
22107 BalaList* _param_list = NULL((void*)0);
22108 BalaList* _tmp0_;
22109 BalaList* _tmp1_;
22110 gint _param_size = 0;
22111 BalaList* _tmp2_;
22112 gint _tmp3_;
22113 gint _tmp4_;
22114 gint _param_index = 0;
22115 _tmp0_ = bala_callable_get_parameters ((BalaCallable*) m);
22116 _tmp1_ = _bala_iterable_ref0 (_tmp0_);
22117 _param_list = _tmp1_;
22118 _tmp2_ = _param_list;
22119 _tmp3_ = bala_collection_get_size ((BalaCollection*) _tmp2_);
22120 _tmp4_ = _tmp3_;
22121 _param_size = _tmp4_;
22122 _param_index = -1;
22123 while (TRUE(!(0))) {
22124 gint _tmp5_;
22125 gint _tmp6_;
22126 BalaParameter* param = NULL((void*)0);
22127 BalaList* _tmp7_;
22128 gpointer _tmp8_;
22129 gboolean _tmp9_ = FALSE(0);
22130 gboolean _tmp10_ = FALSE(0);
22131 gboolean _tmp11_ = FALSE(0);
22132 gboolean _tmp12_ = FALSE(0);
22133 BalaParameter* _tmp13_;
22134 gboolean _tmp14_;
22135 gboolean _tmp15_;
22136 _param_index = _param_index + 1;
22137 _tmp5_ = _param_index;
22138 _tmp6_ = _param_size;
22139 if (!(_tmp5_ < _tmp6_)) {
22140 break;
22141 }
22142 _tmp7_ = _param_list;
22143 _tmp8_ = bala_list_get (_tmp7_, _param_index);
22144 param = (BalaParameter*) _tmp8_;
22145 _tmp13_ = param;
22146 _tmp14_ = bala_parameter_get_captured (_tmp13_);
22147 _tmp15_ = _tmp14_;
22148 if (!_tmp15_) {
22149 BalaParameter* _tmp16_;
22150 gboolean _tmp17_;
22151 gboolean _tmp18_;
22152 _tmp16_ = param;
22153 _tmp17_ = bala_parameter_get_ellipsis (_tmp16_);
22154 _tmp18_ = _tmp17_;
22155 _tmp12_ = !_tmp18_;
22156 } else {
22157 _tmp12_ = FALSE(0);
22158 }
22159 if (_tmp12_) {
22160 BalaParameter* _tmp19_;
22161 gboolean _tmp20_;
22162 gboolean _tmp21_;
22163 _tmp19_ = param;
22164 _tmp20_ = bala_parameter_get_params_array (_tmp19_);
22165 _tmp21_ = _tmp20_;
22166 _tmp11_ = !_tmp21_;
22167 } else {
22168 _tmp11_ = FALSE(0);
22169 }
22170 if (_tmp11_) {
22171 BalaParameter* _tmp22_;
22172 BalaDataType* _tmp23_;
22173 BalaDataType* _tmp24_;
22174 _tmp22_ = param;
22175 _tmp23_ = bala_variable_get_variable_type ((BalaVariable*) _tmp22_);
22176 _tmp24_ = _tmp23_;
22177 _tmp10_ = bala_ccode_base_module_requires_destroy (_tmp24_);
22178 } else {
22179 _tmp10_ = FALSE(0);
22180 }
22181 if (_tmp10_) {
22182 BalaParameter* _tmp25_;
22183 BalaParameterDirection _tmp26_;
22184 BalaParameterDirection _tmp27_;
22185 _tmp25_ = param;
22186 _tmp26_ = bala_parameter_get_direction (_tmp25_);
22187 _tmp27_ = _tmp26_;
22188 _tmp9_ = _tmp27_ == BALA_PARAMETER_DIRECTION_IN;
22189 } else {
22190 _tmp9_ = FALSE(0);
22191 }
22192 if (_tmp9_) {
22193 BalaCCodeFunction* _tmp28_;
22194 BalaCCodeFunction* _tmp29_;
22195 BalaParameter* _tmp30_;
22196 BalaCCodeExpression* _tmp31_;
22197 BalaCCodeExpression* _tmp32_;
22198 _tmp28_ = bala_ccode_base_module_get_ccode (self);
22199 _tmp29_ = _tmp28_;
22200 _tmp30_ = param;
22201 _tmp31_ = bala_ccode_base_module_destroy_parameter (self, _tmp30_);
22202 _tmp32_ = _tmp31_;
22203 bala_ccode_function_add_expression (_tmp29_, _tmp32_);
22204 _bala_ccode_node_unref0 (_tmp32_)((_tmp32_ == ((void*)0)) ? ((void*)0) : (_tmp32_ = (bala_ccode_node_unref
(_tmp32_), ((void*)0))))
;
22205 }
22206 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
22207 }
22208 _bala_iterable_unref0 (_param_list)((_param_list == ((void*)0)) ? ((void*)0) : (_param_list = (bala_iterable_unref
(_param_list), ((void*)0))))
;
22209 }
22210}
22211
22212void
22213bala_ccode_base_module_append_out_param_free (BalaCCodeBaseModule* self,
22214 BalaMethod* m)
22215{
22216 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
22217 if (m == NULL((void*)0)) {
22218 return;
22219 }
22220 {
22221 BalaList* _param_list = NULL((void*)0);
22222 BalaList* _tmp0_;
22223 BalaList* _tmp1_;
22224 gint _param_size = 0;
22225 BalaList* _tmp2_;
22226 gint _tmp3_;
22227 gint _tmp4_;
22228 gint _param_index = 0;
22229 _tmp0_ = bala_callable_get_parameters ((BalaCallable*) m);
22230 _tmp1_ = _bala_iterable_ref0 (_tmp0_);
22231 _param_list = _tmp1_;
22232 _tmp2_ = _param_list;
22233 _tmp3_ = bala_collection_get_size ((BalaCollection*) _tmp2_);
22234 _tmp4_ = _tmp3_;
22235 _param_size = _tmp4_;
22236 _param_index = -1;
22237 while (TRUE(!(0))) {
22238 gint _tmp5_;
22239 gint _tmp6_;
22240 BalaParameter* param = NULL((void*)0);
22241 BalaList* _tmp7_;
22242 gpointer _tmp8_;
22243 gboolean _tmp9_ = FALSE(0);
22244 BalaParameter* _tmp10_;
22245 BalaParameterDirection _tmp11_;
22246 BalaParameterDirection _tmp12_;
22247 _param_index = _param_index + 1;
22248 _tmp5_ = _param_index;
22249 _tmp6_ = _param_size;
22250 if (!(_tmp5_ < _tmp6_)) {
22251 break;
22252 }
22253 _tmp7_ = _param_list;
22254 _tmp8_ = bala_list_get (_tmp7_, _param_index);
22255 param = (BalaParameter*) _tmp8_;
22256 _tmp10_ = param;
22257 _tmp11_ = bala_parameter_get_direction (_tmp10_);
22258 _tmp12_ = _tmp11_;
22259 if (_tmp12_ == BALA_PARAMETER_DIRECTION_OUT) {
22260 BalaParameter* _tmp13_;
22261 BalaDataType* _tmp14_;
22262 BalaDataType* _tmp15_;
22263 _tmp13_ = param;
22264 _tmp14_ = bala_variable_get_variable_type ((BalaVariable*) _tmp13_);
22265 _tmp15_ = _tmp14_;
22266 _tmp9_ = bala_data_type_is_disposable (_tmp15_);
22267 } else {
22268 _tmp9_ = FALSE(0);
22269 }
22270 if (_tmp9_) {
22271 BalaCCodeFunction* _tmp16_;
22272 BalaCCodeFunction* _tmp17_;
22273 BalaParameter* _tmp18_;
22274 BalaCCodeExpression* _tmp19_;
22275 BalaCCodeExpression* _tmp20_;
22276 _tmp16_ = bala_ccode_base_module_get_ccode (self);
22277 _tmp17_ = _tmp16_;
22278 _tmp18_ = param;
22279 _tmp19_ = bala_ccode_base_module_destroy_parameter (self, _tmp18_);
22280 _tmp20_ = _tmp19_;
22281 bala_ccode_function_add_expression (_tmp17_, _tmp20_);
22282 _bala_ccode_node_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_node_unref
(_tmp20_), ((void*)0))))
;
22283 }
22284 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
22285 }
22286 _bala_iterable_unref0 (_param_list)((_param_list == ((void*)0)) ? ((void*)0) : (_param_list = (bala_iterable_unref
(_param_list), ((void*)0))))
;
22287 }
22288}
22289
22290gboolean
22291bala_ccode_base_module_variable_accessible_in_finally (BalaCCodeBaseModule* self,
22292 BalaLocalVariable* local)
22293{
22294 BalaTryStatement* _tmp0_;
22295 BalaTryStatement* _tmp1_;
22296 BalaSymbol* sym = NULL((void*)0);
22297 BalaSymbol* _tmp2_;
22298 BalaSymbol* _tmp3_;
22299 BalaSymbol* _tmp4_;
22300 gboolean result = FALSE(0);
22301 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
22302 g_return_val_if_fail (local != NULL, FALSE)do { if ((local != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "local != NULL"
); return ((0)); } } while (0)
;
22303 _tmp0_ = bala_ccode_base_module_get_current_try (self);
22304 _tmp1_ = _tmp0_;
22305 if (_tmp1_ == NULL((void*)0)) {
22306 result = FALSE(0);
22307 return result;
22308 }
22309 _tmp2_ = bala_ccode_base_module_get_current_symbol (self);
22310 _tmp3_ = _tmp2_;
22311 _tmp4_ = _bala_code_node_ref0 (_tmp3_);
22312 sym = _tmp4_;
22313 while (TRUE(!(0))) {
22314 gboolean _tmp5_ = FALSE(0);
22315 gboolean _tmp6_ = FALSE(0);
22316 BalaSymbol* _tmp7_;
22317 gboolean _tmp16_ = FALSE(0);
22318 gboolean _tmp17_ = FALSE(0);
22319 BalaSymbol* _tmp18_;
22320 BalaCodeNode* _tmp19_;
22321 BalaCodeNode* _tmp20_;
22322 BalaSymbol* _tmp37_;
22323 BalaSymbol* _tmp38_;
22324 BalaSymbol* _tmp39_;
22325 BalaSymbol* _tmp40_;
22326 _tmp7_ = sym;
22327 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp7_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
22328 _tmp6_ = TRUE(!(0));
22329 } else {
22330 BalaSymbol* _tmp8_;
22331 _tmp8_ = sym;
22332 _tmp6_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_PROPERTY_ACCESSOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_property_accessor_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
22333 }
22334 if (!_tmp6_) {
22335 BalaSymbol* _tmp9_;
22336 BalaScope* _tmp10_;
22337 BalaScope* _tmp11_;
22338 const gchar* _tmp12_;
22339 const gchar* _tmp13_;
22340 BalaSymbol* _tmp14_;
22341 BalaSymbol* _tmp15_;
22342 _tmp9_ = sym;
22343 _tmp10_ = bala_symbol_get_scope (_tmp9_);
22344 _tmp11_ = _tmp10_;
22345 _tmp12_ = bala_symbol_get_name ((BalaSymbol*) local);
22346 _tmp13_ = _tmp12_;
22347 _tmp14_ = bala_scope_lookup (_tmp11_, _tmp13_);
22348 _tmp15_ = _tmp14_;
22349 _tmp5_ = _tmp15_ == NULL((void*)0);
22350 _bala_code_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_code_node_unref
(_tmp15_), ((void*)0))))
;
22351 } else {
22352 _tmp5_ = FALSE(0);
22353 }
22354 if (!_tmp5_) {
22355 break;
22356 }
22357 _tmp18_ = sym;
22358 _tmp19_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp18_);
22359 _tmp20_ = _tmp19_;
22360 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, BALA_TYPE_TRY_STATEMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp20_); GType __t = ((bala_try_statement_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
22361 BalaSymbol* _tmp21_;
22362 BalaCodeNode* _tmp22_;
22363 BalaCodeNode* _tmp23_;
22364 BalaBlock* _tmp24_;
22365 BalaBlock* _tmp25_;
22366 _tmp21_ = sym;
22367 _tmp22_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp21_);
22368 _tmp23_ = _tmp22_;
22369 _tmp24_ = bala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp23_, BALA_TYPE_TRY_STATEMENT, BalaTryStatement)(((BalaTryStatement*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp23_), ((bala_try_statement_get_type ())))))
);
22370 _tmp25_ = _tmp24_;
22371 _tmp17_ = _tmp25_ != NULL((void*)0);
22372 } else {
22373 _tmp17_ = FALSE(0);
22374 }
22375 if (_tmp17_) {
22376 _tmp16_ = TRUE(!(0));
22377 } else {
22378 gboolean _tmp26_ = FALSE(0);
22379 BalaSymbol* _tmp27_;
22380 BalaCodeNode* _tmp28_;
22381 BalaCodeNode* _tmp29_;
22382 _tmp27_ = sym;
22383 _tmp28_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp27_);
22384 _tmp29_ = _tmp28_;
22385 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp29_, BALA_TYPE_CATCH_CLAUSE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp29_); GType __t = ((bala_catch_clause_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
22386 BalaSymbol* _tmp30_;
22387 BalaCodeNode* _tmp31_;
22388 BalaCodeNode* _tmp32_;
22389 BalaCodeNode* _tmp33_;
22390 BalaCodeNode* _tmp34_;
22391 BalaBlock* _tmp35_;
22392 BalaBlock* _tmp36_;
22393 _tmp30_ = sym;
22394 _tmp31_ = bala_code_node_get_parent_node ((BalaCodeNode*) _tmp30_);
22395 _tmp32_ = _tmp31_;
22396 _tmp33_ = bala_code_node_get_parent_node (_tmp32_);
22397 _tmp34_ = _tmp33_;
22398 _tmp35_ = bala_try_statement_get_finally_body (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, BALA_TYPE_TRY_STATEMENT, BalaTryStatement)(((BalaTryStatement*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp34_), ((bala_try_statement_get_type ())))))
);
22399 _tmp36_ = _tmp35_;
22400 _tmp26_ = _tmp36_ != NULL((void*)0);
22401 } else {
22402 _tmp26_ = FALSE(0);
22403 }
22404 _tmp16_ = _tmp26_;
22405 }
22406 if (_tmp16_) {
22407 result = TRUE(!(0));
22408 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
22409 return result;
22410 }
22411 _tmp37_ = sym;
22412 _tmp38_ = bala_symbol_get_parent_symbol (_tmp37_);
22413 _tmp39_ = _tmp38_;
22414 _tmp40_ = _bala_code_node_ref0 (_tmp39_);
22415 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
22416 sym = _tmp40_;
22417 }
22418 result = FALSE(0);
22419 _bala_code_node_unref0 (sym)((sym == ((void*)0)) ? ((void*)0) : (sym = (bala_code_node_unref
(sym), ((void*)0))))
;
22420 return result;
22421}
22422
22423void
22424bala_ccode_base_module_return_out_parameter (BalaCCodeBaseModule* self,
22425 BalaParameter* param)
22426{
22427 BalaDelegateType* delegate_type = NULL((void*)0);
22428 BalaDataType* _tmp0_;
22429 BalaDataType* _tmp1_;
22430 BalaDelegateType* _tmp2_;
22431 BalaTargetValue* value = NULL((void*)0);
22432 BalaTargetValue* _tmp3_;
22433 gboolean old_coroutine = FALSE(0);
22434 BalaMethod* _tmp4_;
22435 BalaMethod* _tmp5_;
22436 BalaCCodeFunction* _tmp6_;
22437 BalaCCodeFunction* _tmp7_;
22438 BalaCCodeExpression* _tmp8_;
22439 BalaCCodeExpression* _tmp9_;
22440 BalaCCodeFunction* _tmp10_;
22441 BalaCCodeFunction* _tmp11_;
22442 BalaCCodeExpression* _tmp12_;
22443 BalaCCodeExpression* _tmp13_;
22444 BalaCCodeUnaryExpression* _tmp14_;
22445 BalaCCodeUnaryExpression* _tmp15_;
22446 BalaTargetValue* _tmp16_;
22447 BalaCCodeExpression* _tmp17_;
22448 gboolean _tmp18_ = FALSE(0);
22449 gboolean _tmp19_ = FALSE(0);
22450 BalaDataType* _tmp50_;
22451 BalaDataType* _tmp51_;
22452 BalaCCodeFunction* _tmp62_;
22453 BalaCCodeFunction* _tmp63_;
22454 BalaArrayType* array_type = NULL((void*)0);
22455 BalaDataType* _tmp64_;
22456 BalaDataType* _tmp65_;
22457 BalaArrayType* _tmp66_;
22458 gboolean _tmp67_ = FALSE(0);
22459 gboolean _tmp68_ = FALSE(0);
22460 BalaArrayType* _tmp69_;
22461 BalaMethod* _tmp96_;
22462 BalaMethod* _tmp97_;
22463 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
22464 g_return_if_fail (param != NULL)do { if ((param != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "param != NULL"
); return; } } while (0)
;
22465 _tmp0_ = bala_variable_get_variable_type ((BalaVariable*) param);
22466 _tmp1_ = _tmp0_;
22467 _tmp2_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaDelegateType*) _tmp1_) : NULL((void*)0));
22468 delegate_type = _tmp2_;
22469 _tmp3_ = bala_ccode_base_module_get_parameter_cvalue (self, param);
22470 value = _tmp3_;
22471 old_coroutine = bala_ccode_base_module_is_in_coroutine (self);
22472 _tmp4_ = bala_ccode_base_module_get_current_method (self);
22473 _tmp5_ = _tmp4_;
22474 bala_method_set_coroutine (_tmp5_, FALSE(0));
22475 _tmp6_ = bala_ccode_base_module_get_ccode (self);
22476 _tmp7_ = _tmp6_;
22477 _tmp8_ = bala_ccode_base_module_get_parameter_cexpression (self, param);
22478 _tmp9_ = _tmp8_;
22479 bala_ccode_function_open_if (_tmp7_, _tmp9_);
22480 _bala_ccode_node_unref0 (_tmp9_)((_tmp9_ == ((void*)0)) ? ((void*)0) : (_tmp9_ = (bala_ccode_node_unref
(_tmp9_), ((void*)0))))
;
22481 _tmp10_ = bala_ccode_base_module_get_ccode (self);
22482 _tmp11_ = _tmp10_;
22483 _tmp12_ = bala_ccode_base_module_get_parameter_cexpression (self, param);
22484 _tmp13_ = _tmp12_;
22485 _tmp14_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp13_);
22486 _tmp15_ = _tmp14_;
22487 _tmp16_ = value;
22488 _tmp17_ = bala_get_cvalue_ (_tmp16_);
22489 bala_ccode_function_add_assignment (_tmp11_, (BalaCCodeExpression*) _tmp15_, _tmp17_);
22490 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
22491 _bala_ccode_node_unref0 (_tmp13_)((_tmp13_ == ((void*)0)) ? ((void*)0) : (_tmp13_ = (bala_ccode_node_unref
(_tmp13_), ((void*)0))))
;
22492 if (bala_get_ccode_delegate_target ((BalaCodeNode*) param)) {
22493 BalaDelegateType* _tmp20_;
22494 _tmp20_ = delegate_type;
22495 _tmp19_ = _tmp20_ != NULL((void*)0);
22496 } else {
22497 _tmp19_ = FALSE(0);
22498 }
22499 if (_tmp19_) {
22500 BalaDelegateType* _tmp21_;
22501 BalaDelegate* _tmp22_;
22502 BalaDelegate* _tmp23_;
22503 gboolean _tmp24_;
22504 gboolean _tmp25_;
22505 _tmp21_ = delegate_type;
22506 _tmp22_ = bala_delegate_type_get_delegate_symbol (_tmp21_);
22507 _tmp23_ = _tmp22_;
22508 _tmp24_ = bala_delegate_get_has_target (_tmp23_);
22509 _tmp25_ = _tmp24_;
22510 _tmp18_ = _tmp25_;
22511 } else {
22512 _tmp18_ = FALSE(0);
22513 }
22514 if (_tmp18_) {
22515 BalaCCodeFunction* _tmp26_;
22516 BalaCCodeFunction* _tmp27_;
22517 gchar* _tmp28_;
22518 gchar* _tmp29_;
22519 BalaCCodeExpression* _tmp30_;
22520 BalaCCodeExpression* _tmp31_;
22521 BalaCCodeUnaryExpression* _tmp32_;
22522 BalaCCodeUnaryExpression* _tmp33_;
22523 BalaTargetValue* _tmp34_;
22524 BalaCCodeExpression* _tmp35_;
22525 BalaCCodeExpression* _tmp36_;
22526 BalaDelegateType* _tmp37_;
22527 _tmp26_ = bala_ccode_base_module_get_ccode (self);
22528 _tmp27_ = _tmp26_;
22529 _tmp28_ = bala_get_ccode_delegate_target_name ((BalaVariable*) param);
22530 _tmp29_ = _tmp28_;
22531 _tmp30_ = bala_ccode_base_module_get_cexpression (self, _tmp29_);
22532 _tmp31_ = _tmp30_;
22533 _tmp32_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp31_);
22534 _tmp33_ = _tmp32_;
22535 _tmp34_ = value;
22536 _tmp35_ = bala_ccode_base_module_get_delegate_target_cvalue (self, _tmp34_);
22537 _tmp36_ = _tmp35_;
22538 bala_ccode_function_add_assignment (_tmp27_, (BalaCCodeExpression*) _tmp33_, _tmp36_);
22539 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
22540 _bala_ccode_node_unref0 (_tmp33_)((_tmp33_ == ((void*)0)) ? ((void*)0) : (_tmp33_ = (bala_ccode_node_unref
(_tmp33_), ((void*)0))))
;
22541 _bala_ccode_node_unref0 (_tmp31_)((_tmp31_ == ((void*)0)) ? ((void*)0) : (_tmp31_ = (bala_ccode_node_unref
(_tmp31_), ((void*)0))))
;
22542 _g_free0 (_tmp29_)(_tmp29_ = (g_free (_tmp29_), ((void*)0)));
22543 _tmp37_ = delegate_type;
22544 if (bala_data_type_is_disposable ((BalaDataType*) _tmp37_)) {
22545 BalaCCodeFunction* _tmp38_;
22546 BalaCCodeFunction* _tmp39_;
22547 gchar* _tmp40_;
22548 gchar* _tmp41_;
22549 BalaCCodeExpression* _tmp42_;
22550 BalaCCodeExpression* _tmp43_;
22551 BalaCCodeUnaryExpression* _tmp44_;
22552 BalaCCodeUnaryExpression* _tmp45_;
22553 BalaTargetValue* _tmp46_;
22554 BalaTargetValue* _tmp47_;
22555 BalaCCodeExpression* _tmp48_;
22556 BalaCCodeExpression* _tmp49_;
22557 _tmp38_ = bala_ccode_base_module_get_ccode (self);
22558 _tmp39_ = _tmp38_;
22559 _tmp40_ = bala_get_ccode_delegate_target_destroy_notify_name ((BalaVariable*) param);
22560 _tmp41_ = _tmp40_;
22561 _tmp42_ = bala_ccode_base_module_get_cexpression (self, _tmp41_);
22562 _tmp43_ = _tmp42_;
22563 _tmp44_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp43_);
22564 _tmp45_ = _tmp44_;
22565 _tmp46_ = bala_ccode_base_module_get_parameter_cvalue (self, param);
22566 _tmp47_ = _tmp46_;
22567 _tmp48_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp47_);
22568 _tmp49_ = _tmp48_;
22569 bala_ccode_function_add_assignment (_tmp39_, (BalaCCodeExpression*) _tmp45_, _tmp49_);
22570 _bala_ccode_node_unref0 (_tmp49_)((_tmp49_ == ((void*)0)) ? ((void*)0) : (_tmp49_ = (bala_ccode_node_unref
(_tmp49_), ((void*)0))))
;
22571 _bala_target_value_unref0 (_tmp47_)((_tmp47_ == ((void*)0)) ? ((void*)0) : (_tmp47_ = (bala_target_value_unref
(_tmp47_), ((void*)0))))
;
22572 _bala_ccode_node_unref0 (_tmp45_)((_tmp45_ == ((void*)0)) ? ((void*)0) : (_tmp45_ = (bala_ccode_node_unref
(_tmp45_), ((void*)0))))
;
22573 _bala_ccode_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_ccode_node_unref
(_tmp43_), ((void*)0))))
;
22574 _g_free0 (_tmp41_)(_tmp41_ = (g_free (_tmp41_), ((void*)0)));
22575 }
22576 }
22577 _tmp50_ = bala_variable_get_variable_type ((BalaVariable*) param);
22578 _tmp51_ = _tmp50_;
22579 if (bala_data_type_is_disposable (_tmp51_)) {
22580 BalaCCodeFunction* _tmp52_;
22581 BalaCCodeFunction* _tmp53_;
22582 BalaMethod* _tmp54_;
22583 BalaMethod* _tmp55_;
22584 BalaCCodeFunction* _tmp56_;
22585 BalaCCodeFunction* _tmp57_;
22586 BalaCCodeExpression* _tmp58_;
22587 BalaCCodeExpression* _tmp59_;
22588 BalaMethod* _tmp60_;
22589 BalaMethod* _tmp61_;
22590 _tmp52_ = bala_ccode_base_module_get_ccode (self);
22591 _tmp53_ = _tmp52_;
22592 bala_ccode_function_add_else (_tmp53_);
22593 _tmp54_ = bala_ccode_base_module_get_current_method (self);
22594 _tmp55_ = _tmp54_;
22595 bala_method_set_coroutine (_tmp55_, old_coroutine);
22596 _tmp56_ = bala_ccode_base_module_get_ccode (self);
22597 _tmp57_ = _tmp56_;
22598 _tmp58_ = bala_ccode_base_module_destroy_parameter (self, param);
22599 _tmp59_ = _tmp58_;
22600 bala_ccode_function_add_expression (_tmp57_, _tmp59_);
22601 _bala_ccode_node_unref0 (_tmp59_)((_tmp59_ == ((void*)0)) ? ((void*)0) : (_tmp59_ = (bala_ccode_node_unref
(_tmp59_), ((void*)0))))
;
22602 _tmp60_ = bala_ccode_base_module_get_current_method (self);
22603 _tmp61_ = _tmp60_;
22604 bala_method_set_coroutine (_tmp61_, FALSE(0));
22605 }
22606 _tmp62_ = bala_ccode_base_module_get_ccode (self);
22607 _tmp63_ = _tmp62_;
22608 bala_ccode_function_close (_tmp63_);
22609 _tmp64_ = bala_variable_get_variable_type ((BalaVariable*) param);
22610 _tmp65_ = _tmp64_;
22611 _tmp66_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp65_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp65_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp65_) : NULL((void*)0));
22612 array_type = _tmp66_;
22613 _tmp69_ = array_type;
22614 if (_tmp69_ != NULL((void*)0)) {
22615 BalaArrayType* _tmp70_;
22616 gboolean _tmp71_;
22617 gboolean _tmp72_;
22618 _tmp70_ = array_type;
22619 _tmp71_ = bala_array_type_get_fixed_length (_tmp70_);
22620 _tmp72_ = _tmp71_;
22621 _tmp68_ = !_tmp72_;
22622 } else {
22623 _tmp68_ = FALSE(0);
22624 }
22625 if (_tmp68_) {
22626 _tmp67_ = bala_get_ccode_array_length ((BalaCodeNode*) param);
22627 } else {
22628 _tmp67_ = FALSE(0);
22629 }
22630 if (_tmp67_) {
22631 {
22632 gint dim = 0;
22633 dim = 1;
22634 {
22635 gboolean _tmp73_ = FALSE(0);
22636 _tmp73_ = TRUE(!(0));
22637 while (TRUE(!(0))) {
22638 BalaArrayType* _tmp75_;
22639 gint _tmp76_;
22640 gint _tmp77_;
22641 gchar* length_cname = NULL((void*)0);
22642 gchar* _tmp78_;
22643 BalaCCodeFunction* _tmp79_;
22644 BalaCCodeFunction* _tmp80_;
22645 const gchar* _tmp81_;
22646 BalaCCodeExpression* _tmp82_;
22647 BalaCCodeExpression* _tmp83_;
22648 BalaCCodeFunction* _tmp84_;
22649 BalaCCodeFunction* _tmp85_;
22650 const gchar* _tmp86_;
22651 BalaCCodeExpression* _tmp87_;
22652 BalaCCodeExpression* _tmp88_;
22653 BalaCCodeUnaryExpression* _tmp89_;
22654 BalaCCodeUnaryExpression* _tmp90_;
22655 BalaTargetValue* _tmp91_;
22656 BalaCCodeExpression* _tmp92_;
22657 BalaCCodeExpression* _tmp93_;
22658 BalaCCodeFunction* _tmp94_;
22659 BalaCCodeFunction* _tmp95_;
22660 if (!_tmp73_) {
22661 gint _tmp74_;
22662 _tmp74_ = dim;
22663 dim = _tmp74_ + 1;
22664 }
22665 _tmp73_ = FALSE(0);
22666 _tmp75_ = array_type;
22667 _tmp76_ = bala_array_type_get_rank (_tmp75_);
22668 _tmp77_ = _tmp76_;
22669 if (!(dim <= _tmp77_)) {
22670 break;
22671 }
22672 _tmp78_ = bala_ccode_base_module_get_variable_array_length_cname (self, (BalaVariable*) param, dim);
22673 length_cname = _tmp78_;
22674 _tmp79_ = bala_ccode_base_module_get_ccode (self);
22675 _tmp80_ = _tmp79_;
22676 _tmp81_ = length_cname;
22677 _tmp82_ = bala_ccode_base_module_get_cexpression (self, _tmp81_);
22678 _tmp83_ = _tmp82_;
22679 bala_ccode_function_open_if (_tmp80_, _tmp83_);
22680 _bala_ccode_node_unref0 (_tmp83_)((_tmp83_ == ((void*)0)) ? ((void*)0) : (_tmp83_ = (bala_ccode_node_unref
(_tmp83_), ((void*)0))))
;
22681 _tmp84_ = bala_ccode_base_module_get_ccode (self);
22682 _tmp85_ = _tmp84_;
22683 _tmp86_ = length_cname;
22684 _tmp87_ = bala_ccode_base_module_get_cexpression (self, _tmp86_);
22685 _tmp88_ = _tmp87_;
22686 _tmp89_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp88_);
22687 _tmp90_ = _tmp89_;
22688 _tmp91_ = value;
22689 _tmp92_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp91_, dim);
22690 _tmp93_ = _tmp92_;
22691 bala_ccode_function_add_assignment (_tmp85_, (BalaCCodeExpression*) _tmp90_, _tmp93_);
22692 _bala_ccode_node_unref0 (_tmp93_)((_tmp93_ == ((void*)0)) ? ((void*)0) : (_tmp93_ = (bala_ccode_node_unref
(_tmp93_), ((void*)0))))
;
22693 _bala_ccode_node_unref0 (_tmp90_)((_tmp90_ == ((void*)0)) ? ((void*)0) : (_tmp90_ = (bala_ccode_node_unref
(_tmp90_), ((void*)0))))
;
22694 _bala_ccode_node_unref0 (_tmp88_)((_tmp88_ == ((void*)0)) ? ((void*)0) : (_tmp88_ = (bala_ccode_node_unref
(_tmp88_), ((void*)0))))
;
22695 _tmp94_ = bala_ccode_base_module_get_ccode (self);
22696 _tmp95_ = _tmp94_;
22697 bala_ccode_function_close (_tmp95_);
22698 _g_free0 (length_cname)(length_cname = (g_free (length_cname), ((void*)0)));
22699 }
22700 }
22701 }
22702 }
22703 _tmp96_ = bala_ccode_base_module_get_current_method (self);
22704 _tmp97_ = _tmp96_;
22705 bala_method_set_coroutine (_tmp97_, old_coroutine);
22706 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
22707 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
22708 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
22709}
22710
22711static void
22712bala_ccode_base_module_real_visit_return_statement (BalaCodeVisitor* base,
22713 BalaReturnStatement* stmt)
22714{
22715 BalaCCodeBaseModule * self;
22716 BalaSymbol* return_expression_symbol = NULL((void*)0);
22717 BalaExpression* _tmp0_;
22718 BalaExpression* _tmp1_;
22719 gboolean _tmp14_ = FALSE(0);
22720 gboolean _tmp15_ = FALSE(0);
22721 gboolean _tmp16_ = FALSE(0);
22722 BalaMethod* _tmp17_;
22723 BalaMethod* _tmp18_;
22724 BalaExpression* _tmp120_;
22725 BalaExpression* _tmp121_;
22726 BalaMethod* _tmp134_;
22727 BalaMethod* _tmp135_;
22728 BalaSymbol* _tmp148_;
22729 BalaSymbol* _tmp149_;
22730 gboolean _tmp150_ = FALSE(0);
22731 BalaMethod* _tmp151_;
22732 BalaMethod* _tmp152_;
22733 gboolean _tmp172_ = FALSE(0);
22734 BalaMethod* _tmp173_;
22735 BalaMethod* _tmp174_;
22736 BalaSymbol* _tmp235_;
22737 self = (BalaCCodeBaseModule*) base;
22738 g_return_if_fail (stmt != NULL)do { if ((stmt != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "stmt != NULL"
); return; } } while (0)
;
22739 return_expression_symbol = NULL((void*)0);
22740 _tmp0_ = bala_return_statement_get_return_expression (stmt);
22741 _tmp1_ = _tmp0_;
22742 if (_tmp1_ != NULL((void*)0)) {
22743 BalaLocalVariable* local = NULL((void*)0);
22744 BalaExpression* _tmp2_;
22745 BalaExpression* _tmp3_;
22746 BalaSymbol* _tmp4_;
22747 BalaSymbol* _tmp5_;
22748 BalaLocalVariable* _tmp6_;
22749 gboolean _tmp7_ = FALSE(0);
22750 BalaLocalVariable* _tmp8_;
22751 _tmp2_ = bala_return_statement_get_return_expression (stmt);
22752 _tmp3_ = _tmp2_;
22753 _tmp4_ = bala_expression_get_symbol_reference (_tmp3_);
22754 _tmp5_ = _tmp4_;
22755 _tmp6_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, BALA_TYPE_LOCAL_VARIABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp5_); GType __t = ((bala_local_variable_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaLocalVariable*) _tmp5_) : NULL((void*)0));
22756 local = _tmp6_;
22757 _tmp8_ = local;
22758 if (_tmp8_ != NULL((void*)0)) {
22759 BalaLocalVariable* _tmp9_;
22760 gboolean _tmp10_;
22761 gboolean _tmp11_;
22762 _tmp9_ = local;
22763 _tmp10_ = bala_symbol_get_active ((BalaSymbol*) _tmp9_);
22764 _tmp11_ = _tmp10_;
22765 _tmp7_ = !_tmp11_;
22766 } else {
22767 _tmp7_ = FALSE(0);
22768 }
22769 if (_tmp7_) {
22770 BalaLocalVariable* _tmp12_;
22771 BalaSymbol* _tmp13_;
22772 _tmp12_ = local;
22773 _tmp13_ = _bala_code_node_ref0 ((BalaSymbol*) _tmp12_);
22774 _bala_code_node_unref0 (return_expression_symbol)((return_expression_symbol == ((void*)0)) ? ((void*)0) : (return_expression_symbol
= (bala_code_node_unref (return_expression_symbol), ((void*)
0))))
;
22775 return_expression_symbol = _tmp13_;
22776 }
22777 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
22778 }
22779 _tmp17_ = bala_ccode_base_module_get_current_method (self);
22780 _tmp18_ = _tmp17_;
22781 if (_tmp18_ != NULL((void*)0)) {
22782 BalaMethod* _tmp19_;
22783 BalaMethod* _tmp20_;
22784 _tmp19_ = bala_ccode_base_module_get_current_method (self);
22785 _tmp20_ = _tmp19_;
22786 _tmp16_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp20_);
22787 } else {
22788 _tmp16_ = FALSE(0);
22789 }
22790 if (_tmp16_) {
22791 _tmp15_ = TRUE(!(0));
22792 } else {
22793 gboolean _tmp21_ = FALSE(0);
22794 BalaPropertyAccessor* _tmp22_;
22795 BalaPropertyAccessor* _tmp23_;
22796 _tmp22_ = bala_ccode_base_module_get_current_property_accessor (self);
22797 _tmp23_ = _tmp22_;
22798 if (_tmp23_ != NULL((void*)0)) {
22799 BalaPropertyAccessor* _tmp24_;
22800 BalaPropertyAccessor* _tmp25_;
22801 _tmp24_ = bala_ccode_base_module_get_current_property_accessor (self);
22802 _tmp25_ = _tmp24_;
22803 _tmp21_ = bala_get_ccode_array_length ((BalaCodeNode*) _tmp25_);
22804 } else {
22805 _tmp21_ = FALSE(0);
22806 }
22807 _tmp15_ = _tmp21_;
22808 }
22809 if (_tmp15_) {
22810 BalaDataType* _tmp26_;
22811 BalaDataType* _tmp27_;
22812 _tmp26_ = bala_ccode_base_module_get_current_return_type (self);
22813 _tmp27_ = _tmp26_;
22814 _tmp14_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp27_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp27_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
22815 } else {
22816 _tmp14_ = FALSE(0);
22817 }
22818 if (_tmp14_) {
22819 BalaTargetValue* temp_value = NULL((void*)0);
22820 BalaExpression* _tmp28_;
22821 BalaExpression* _tmp29_;
22822 BalaTargetValue* _tmp30_;
22823 BalaTargetValue* _tmp31_;
22824 BalaTargetValue* _tmp32_;
22825 BalaArrayType* array_type = NULL((void*)0);
22826 BalaDataType* _tmp33_;
22827 BalaDataType* _tmp34_;
22828 BalaArrayType* _tmp35_;
22829 BalaExpression* _tmp62_;
22830 BalaExpression* _tmp63_;
22831 BalaTargetValue* _tmp64_;
22832 _tmp28_ = bala_return_statement_get_return_expression (stmt);
22833 _tmp29_ = _tmp28_;
22834 _tmp30_ = bala_expression_get_target_value (_tmp29_);
22835 _tmp31_ = _tmp30_;
22836 _tmp32_ = bala_ccode_base_module_store_temp_value (self, _tmp31_, (BalaCodeNode*) stmt, NULL((void*)0));
22837 temp_value = _tmp32_;
22838 _tmp33_ = bala_ccode_base_module_get_current_return_type (self);
22839 _tmp34_ = _tmp33_;
22840 _tmp35_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp34_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp34_), ((bala_array_type_get_type ())))))
);
22841 array_type = _tmp35_;
22842 {
22843 gint dim = 0;
22844 dim = 1;
22845 {
22846 gboolean _tmp36_ = FALSE(0);
22847 _tmp36_ = TRUE(!(0));
22848 while (TRUE(!(0))) {
22849 BalaArrayType* _tmp38_;
22850 gint _tmp39_;
22851 gint _tmp40_;
22852 BalaCCodeExpression* len_l = NULL((void*)0);
22853 gchar* _tmp41_;
22854 gchar* _tmp42_;
22855 BalaCCodeExpression* _tmp43_;
22856 BalaCCodeExpression* _tmp44_;
22857 BalaCCodeExpression* len_r = NULL((void*)0);
22858 BalaTargetValue* _tmp45_;
22859 BalaCCodeExpression* _tmp46_;
22860 if (!_tmp36_) {
22861 gint _tmp37_;
22862 _tmp37_ = dim;
22863 dim = _tmp37_ + 1;
22864 }
22865 _tmp36_ = FALSE(0);
22866 _tmp38_ = array_type;
22867 _tmp39_ = bala_array_type_get_rank (_tmp38_);
22868 _tmp40_ = _tmp39_;
22869 if (!(dim <= _tmp40_)) {
22870 break;
22871 }
22872 _tmp41_ = bala_ccode_base_module_get_array_length_cname (self, "result", dim);
22873 _tmp42_ = _tmp41_;
22874 _tmp43_ = bala_ccode_base_module_get_cexpression (self, _tmp42_);
22875 _tmp44_ = _tmp43_;
22876 _g_free0 (_tmp42_)(_tmp42_ = (g_free (_tmp42_), ((void*)0)));
22877 len_l = _tmp44_;
22878 _tmp45_ = temp_value;
22879 _tmp46_ = bala_ccode_base_module_get_array_length_cvalue (self, _tmp45_, dim);
22880 len_r = _tmp46_;
22881 if (!bala_ccode_base_module_is_in_coroutine (self)) {
22882 BalaCCodeFunction* _tmp47_;
22883 BalaCCodeFunction* _tmp48_;
22884 BalaCCodeExpression* _tmp49_;
22885 BalaCCodeExpression* _tmp50_;
22886 BalaCCodeUnaryExpression* _tmp51_;
22887 BalaCCodeFunction* _tmp52_;
22888 BalaCCodeFunction* _tmp53_;
22889 BalaCCodeExpression* _tmp54_;
22890 BalaCCodeExpression* _tmp55_;
22891 BalaCCodeFunction* _tmp56_;
22892 BalaCCodeFunction* _tmp57_;
22893 _tmp47_ = bala_ccode_base_module_get_ccode (self);
22894 _tmp48_ = _tmp47_;
22895 _tmp49_ = len_l;
22896 bala_ccode_function_open_if (_tmp48_, _tmp49_);
22897 _tmp50_ = len_l;
22898 _tmp51_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp50_);
22899 _bala_ccode_node_unref0 (len_l)((len_l == ((void*)0)) ? ((void*)0) : (len_l = (bala_ccode_node_unref
(len_l), ((void*)0))))
;
22900 len_l = (BalaCCodeExpression*) _tmp51_;
22901 _tmp52_ = bala_ccode_base_module_get_ccode (self);
22902 _tmp53_ = _tmp52_;
22903 _tmp54_ = len_l;
22904 _tmp55_ = len_r;
22905 bala_ccode_function_add_assignment (_tmp53_, _tmp54_, _tmp55_);
22906 _tmp56_ = bala_ccode_base_module_get_ccode (self);
22907 _tmp57_ = _tmp56_;
22908 bala_ccode_function_close (_tmp57_);
22909 } else {
22910 BalaCCodeFunction* _tmp58_;
22911 BalaCCodeFunction* _tmp59_;
22912 BalaCCodeExpression* _tmp60_;
22913 BalaCCodeExpression* _tmp61_;
22914 _tmp58_ = bala_ccode_base_module_get_ccode (self);
22915 _tmp59_ = _tmp58_;
22916 _tmp60_ = len_l;
22917 _tmp61_ = len_r;
22918 bala_ccode_function_add_assignment (_tmp59_, _tmp60_, _tmp61_);
22919 }
22920 _bala_ccode_node_unref0 (len_r)((len_r == ((void*)0)) ? ((void*)0) : (len_r = (bala_ccode_node_unref
(len_r), ((void*)0))))
;
22921 _bala_ccode_node_unref0 (len_l)((len_l == ((void*)0)) ? ((void*)0) : (len_l = (bala_ccode_node_unref
(len_l), ((void*)0))))
;
22922 }
22923 }
22924 }
22925 _tmp62_ = bala_return_statement_get_return_expression (stmt);
22926 _tmp63_ = _tmp62_;
22927 _tmp64_ = temp_value;
22928 bala_expression_set_target_value (_tmp63_, _tmp64_);
22929 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
22930 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
22931 } else {
22932 gboolean _tmp65_ = FALSE(0);
22933 gboolean _tmp66_ = FALSE(0);
22934 gboolean _tmp67_ = FALSE(0);
22935 BalaMethod* _tmp68_;
22936 BalaMethod* _tmp69_;
22937 _tmp68_ = bala_ccode_base_module_get_current_method (self);
22938 _tmp69_ = _tmp68_;
22939 if (_tmp69_ != NULL((void*)0)) {
22940 BalaMethod* _tmp70_;
22941 BalaMethod* _tmp71_;
22942 _tmp70_ = bala_ccode_base_module_get_current_method (self);
22943 _tmp71_ = _tmp70_;
22944 _tmp67_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp71_);
22945 } else {
22946 _tmp67_ = FALSE(0);
22947 }
22948 if (_tmp67_) {
22949 _tmp66_ = TRUE(!(0));
22950 } else {
22951 gboolean _tmp72_ = FALSE(0);
22952 BalaPropertyAccessor* _tmp73_;
22953 BalaPropertyAccessor* _tmp74_;
22954 _tmp73_ = bala_ccode_base_module_get_current_property_accessor (self);
22955 _tmp74_ = _tmp73_;
22956 if (_tmp74_ != NULL((void*)0)) {
22957 BalaPropertyAccessor* _tmp75_;
22958 BalaPropertyAccessor* _tmp76_;
22959 _tmp75_ = bala_ccode_base_module_get_current_property_accessor (self);
22960 _tmp76_ = _tmp75_;
22961 _tmp72_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp76_);
22962 } else {
22963 _tmp72_ = FALSE(0);
22964 }
22965 _tmp66_ = _tmp72_;
22966 }
22967 if (_tmp66_) {
22968 BalaDataType* _tmp77_;
22969 BalaDataType* _tmp78_;
22970 _tmp77_ = bala_ccode_base_module_get_current_return_type (self);
22971 _tmp78_ = _tmp77_;
22972 _tmp65_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp78_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp78_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
22973 } else {
22974 _tmp65_ = FALSE(0);
22975 }
22976 if (_tmp65_) {
22977 BalaDelegateType* delegate_type = NULL((void*)0);
22978 BalaDataType* _tmp79_;
22979 BalaDataType* _tmp80_;
22980 BalaDelegateType* _tmp81_;
22981 BalaDelegateType* _tmp82_;
22982 BalaDelegate* _tmp83_;
22983 BalaDelegate* _tmp84_;
22984 gboolean _tmp85_;
22985 gboolean _tmp86_;
22986 _tmp79_ = bala_ccode_base_module_get_current_return_type (self);
22987 _tmp80_ = _tmp79_;
22988 _tmp81_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp80_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp80_), ((bala_delegate_type_get_type ())))))
);
22989 delegate_type = _tmp81_;
22990 _tmp82_ = delegate_type;
22991 _tmp83_ = bala_delegate_type_get_delegate_symbol (_tmp82_);
22992 _tmp84_ = _tmp83_;
22993 _tmp85_ = bala_delegate_get_has_target (_tmp84_);
22994 _tmp86_ = _tmp85_;
22995 if (_tmp86_) {
22996 BalaTargetValue* temp_value = NULL((void*)0);
22997 BalaExpression* _tmp87_;
22998 BalaExpression* _tmp88_;
22999 BalaTargetValue* _tmp89_;
23000 BalaTargetValue* _tmp90_;
23001 BalaTargetValue* _tmp91_;
23002 BalaCCodeExpression* target_l = NULL((void*)0);
23003 gchar* _tmp92_;
23004 gchar* _tmp93_;
23005 BalaCCodeExpression* _tmp94_;
23006 BalaCCodeExpression* _tmp95_;
23007 BalaCCodeExpression* target_r = NULL((void*)0);
23008 BalaTargetValue* _tmp98_;
23009 BalaCCodeExpression* _tmp99_;
23010 BalaCCodeFunction* _tmp100_;
23011 BalaCCodeFunction* _tmp101_;
23012 BalaCCodeExpression* _tmp102_;
23013 BalaCCodeExpression* _tmp103_;
23014 BalaDelegateType* _tmp104_;
23015 BalaExpression* _tmp117_;
23016 BalaExpression* _tmp118_;
23017 BalaTargetValue* _tmp119_;
23018 _tmp87_ = bala_return_statement_get_return_expression (stmt);
23019 _tmp88_ = _tmp87_;
23020 _tmp89_ = bala_expression_get_target_value (_tmp88_);
23021 _tmp90_ = _tmp89_;
23022 _tmp91_ = bala_ccode_base_module_store_temp_value (self, _tmp90_, (BalaCodeNode*) stmt, NULL((void*)0));
23023 temp_value = _tmp91_;
23024 _tmp92_ = bala_ccode_base_module_get_delegate_target_cname (self, "result");
23025 _tmp93_ = _tmp92_;
23026 _tmp94_ = bala_ccode_base_module_get_cexpression (self, _tmp93_);
23027 _tmp95_ = _tmp94_;
23028 _g_free0 (_tmp93_)(_tmp93_ = (g_free (_tmp93_), ((void*)0)));
23029 target_l = _tmp95_;
23030 if (!bala_ccode_base_module_is_in_coroutine (self)) {
23031 BalaCCodeExpression* _tmp96_;
23032 BalaCCodeUnaryExpression* _tmp97_;
23033 _tmp96_ = target_l;
23034 _tmp97_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp96_);
23035 _bala_ccode_node_unref0 (target_l)((target_l == ((void*)0)) ? ((void*)0) : (target_l = (bala_ccode_node_unref
(target_l), ((void*)0))))
;
23036 target_l = (BalaCCodeExpression*) _tmp97_;
23037 }
23038 _tmp98_ = temp_value;
23039 _tmp99_ = bala_ccode_base_module_get_delegate_target_cvalue (self, _tmp98_);
23040 target_r = _tmp99_;
23041 _tmp100_ = bala_ccode_base_module_get_ccode (self);
23042 _tmp101_ = _tmp100_;
23043 _tmp102_ = target_l;
23044 _tmp103_ = target_r;
23045 bala_ccode_function_add_assignment (_tmp101_, _tmp102_, _tmp103_);
23046 _tmp104_ = delegate_type;
23047 if (bala_data_type_is_disposable ((BalaDataType*) _tmp104_)) {
23048 BalaCCodeExpression* target_l_destroy_notify = NULL((void*)0);
23049 gchar* _tmp105_;
23050 gchar* _tmp106_;
23051 BalaCCodeExpression* _tmp107_;
23052 BalaCCodeExpression* _tmp108_;
23053 BalaCCodeExpression* target_r_destroy_notify = NULL((void*)0);
23054 BalaTargetValue* _tmp111_;
23055 BalaCCodeExpression* _tmp112_;
23056 BalaCCodeFunction* _tmp113_;
23057 BalaCCodeFunction* _tmp114_;
23058 BalaCCodeExpression* _tmp115_;
23059 BalaCCodeExpression* _tmp116_;
23060 _tmp105_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cname (self, "result");
23061 _tmp106_ = _tmp105_;
23062 _tmp107_ = bala_ccode_base_module_get_cexpression (self, _tmp106_);
23063 _tmp108_ = _tmp107_;
23064 _g_free0 (_tmp106_)(_tmp106_ = (g_free (_tmp106_), ((void*)0)));
23065 target_l_destroy_notify = _tmp108_;
23066 if (!bala_ccode_base_module_is_in_coroutine (self)) {
23067 BalaCCodeExpression* _tmp109_;
23068 BalaCCodeUnaryExpression* _tmp110_;
23069 _tmp109_ = target_l_destroy_notify;
23070 _tmp110_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp109_);
23071 _bala_ccode_node_unref0 (target_l_destroy_notify)((target_l_destroy_notify == ((void*)0)) ? ((void*)0) : (target_l_destroy_notify
= (bala_ccode_node_unref (target_l_destroy_notify), ((void*)
0))))
;
23072 target_l_destroy_notify = (BalaCCodeExpression*) _tmp110_;
23073 }
23074 _tmp111_ = temp_value;
23075 _tmp112_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp111_);
23076 target_r_destroy_notify = _tmp112_;
23077 _tmp113_ = bala_ccode_base_module_get_ccode (self);
23078 _tmp114_ = _tmp113_;
23079 _tmp115_ = target_l_destroy_notify;
23080 _tmp116_ = target_r_destroy_notify;
23081 bala_ccode_function_add_assignment (_tmp114_, _tmp115_, _tmp116_);
23082 _bala_ccode_node_unref0 (target_r_destroy_notify)((target_r_destroy_notify == ((void*)0)) ? ((void*)0) : (target_r_destroy_notify
= (bala_ccode_node_unref (target_r_destroy_notify), ((void*)
0))))
;
23083 _bala_ccode_node_unref0 (target_l_destroy_notify)((target_l_destroy_notify == ((void*)0)) ? ((void*)0) : (target_l_destroy_notify
= (bala_ccode_node_unref (target_l_destroy_notify), ((void*)
0))))
;
23084 }
23085 _tmp117_ = bala_return_statement_get_return_expression (stmt);
23086 _tmp118_ = _tmp117_;
23087 _tmp119_ = temp_value;
23088 bala_expression_set_target_value (_tmp118_, _tmp119_);
23089 _bala_ccode_node_unref0 (target_r)((target_r == ((void*)0)) ? ((void*)0) : (target_r = (bala_ccode_node_unref
(target_r), ((void*)0))))
;
23090 _bala_ccode_node_unref0 (target_l)((target_l == ((void*)0)) ? ((void*)0) : (target_l = (bala_ccode_node_unref
(target_l), ((void*)0))))
;
23091 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
23092 }
23093 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
23094 }
23095 }
23096 _tmp120_ = bala_return_statement_get_return_expression (stmt);
23097 _tmp121_ = _tmp120_;
23098 if (_tmp121_ != NULL((void*)0)) {
23099 BalaCCodeExpression* result_lhs = NULL((void*)0);
23100 BalaCCodeExpression* _tmp122_;
23101 gboolean _tmp123_ = FALSE(0);
23102 BalaDataType* _tmp124_;
23103 BalaDataType* _tmp125_;
23104 BalaCCodeFunction* _tmp128_;
23105 BalaCCodeFunction* _tmp129_;
23106 BalaCCodeExpression* _tmp130_;
23107 BalaExpression* _tmp131_;
23108 BalaExpression* _tmp132_;
23109 BalaCCodeExpression* _tmp133_;
23110 _tmp122_ = bala_ccode_base_module_get_cexpression (self, "result");
23111 result_lhs = _tmp122_;
23112 _tmp124_ = bala_ccode_base_module_get_current_return_type (self);
23113 _tmp125_ = _tmp124_;
23114 if (bala_data_type_is_real_non_null_struct_type (_tmp125_)) {
23115 _tmp123_ = !bala_ccode_base_module_is_in_coroutine (self);
23116 } else {
23117 _tmp123_ = FALSE(0);
23118 }
23119 if (_tmp123_) {
23120 BalaCCodeExpression* _tmp126_;
23121 BalaCCodeUnaryExpression* _tmp127_;
23122 _tmp126_ = result_lhs;
23123 _tmp127_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp126_);
23124 _bala_ccode_node_unref0 (result_lhs)((result_lhs == ((void*)0)) ? ((void*)0) : (result_lhs = (bala_ccode_node_unref
(result_lhs), ((void*)0))))
;
23125 result_lhs = (BalaCCodeExpression*) _tmp127_;
23126 }
23127 _tmp128_ = bala_ccode_base_module_get_ccode (self);
23128 _tmp129_ = _tmp128_;
23129 _tmp130_ = result_lhs;
23130 _tmp131_ = bala_return_statement_get_return_expression (stmt);
23131 _tmp132_ = _tmp131_;
23132 _tmp133_ = bala_get_cvalue (_tmp132_);
23133 bala_ccode_function_add_assignment (_tmp129_, _tmp130_, _tmp133_);
23134 _bala_ccode_node_unref0 (result_lhs)((result_lhs == ((void*)0)) ? ((void*)0) : (result_lhs = (bala_ccode_node_unref
(result_lhs), ((void*)0))))
;
23135 }
23136 _tmp134_ = bala_ccode_base_module_get_current_method (self);
23137 _tmp135_ = _tmp134_;
23138 if (_tmp135_ != NULL((void*)0)) {
23139 {
23140 BalaList* _postcondition_list = NULL((void*)0);
23141 BalaMethod* _tmp136_;
23142 BalaMethod* _tmp137_;
23143 BalaList* _tmp138_;
23144 BalaList* _tmp139_;
23145 gint _postcondition_size = 0;
23146 BalaList* _tmp140_;
23147 gint _tmp141_;
23148 gint _tmp142_;
23149 gint _postcondition_index = 0;
23150 _tmp136_ = bala_ccode_base_module_get_current_method (self);
23151 _tmp137_ = _tmp136_;
23152 _tmp138_ = bala_method_get_postconditions (_tmp137_);
23153 _tmp139_ = _bala_iterable_ref0 (_tmp138_);
23154 _postcondition_list = _tmp139_;
23155 _tmp140_ = _postcondition_list;
23156 _tmp141_ = bala_collection_get_size ((BalaCollection*) _tmp140_);
23157 _tmp142_ = _tmp141_;
23158 _postcondition_size = _tmp142_;
23159 _postcondition_index = -1;
23160 while (TRUE(!(0))) {
23161 gint _tmp143_;
23162 gint _tmp144_;
23163 BalaExpression* postcondition = NULL((void*)0);
23164 BalaList* _tmp145_;
23165 gpointer _tmp146_;
23166 BalaExpression* _tmp147_;
23167 _postcondition_index = _postcondition_index + 1;
23168 _tmp143_ = _postcondition_index;
23169 _tmp144_ = _postcondition_size;
23170 if (!(_tmp143_ < _tmp144_)) {
23171 break;
23172 }
23173 _tmp145_ = _postcondition_list;
23174 _tmp146_ = bala_list_get (_tmp145_, _postcondition_index);
23175 postcondition = (BalaExpression*) _tmp146_;
23176 _tmp147_ = postcondition;
23177 bala_ccode_base_module_create_postcondition_statement (self, _tmp147_);
23178 _bala_code_node_unref0 (postcondition)((postcondition == ((void*)0)) ? ((void*)0) : (postcondition =
(bala_code_node_unref (postcondition), ((void*)0))))
;
23179 }
23180 _bala_iterable_unref0 (_postcondition_list)((_postcondition_list == ((void*)0)) ? ((void*)0) : (_postcondition_list
= (bala_iterable_unref (_postcondition_list), ((void*)0))))
;
23181 }
23182 }
23183 _tmp148_ = bala_ccode_base_module_get_current_symbol (self);
23184 _tmp149_ = _tmp148_;
23185 bala_ccode_base_module_append_local_free (self, _tmp149_, NULL((void*)0), NULL((void*)0));
23186 _tmp151_ = bala_ccode_base_module_get_current_method (self);
23187 _tmp152_ = _tmp151_;
23188 if (_tmp152_ != NULL((void*)0)) {
23189 BalaMethod* _tmp153_;
23190 BalaMethod* _tmp154_;
23191 gboolean _tmp155_;
23192 gboolean _tmp156_;
23193 _tmp153_ = bala_ccode_base_module_get_current_method (self);
23194 _tmp154_ = _tmp153_;
23195 _tmp155_ = bala_method_get_coroutine (_tmp154_);
23196 _tmp156_ = _tmp155_;
23197 _tmp150_ = !_tmp156_;
23198 } else {
23199 _tmp150_ = FALSE(0);
23200 }
23201 if (_tmp150_) {
23202 {
23203 BalaList* _param_list = NULL((void*)0);
23204 BalaMethod* _tmp157_;
23205 BalaMethod* _tmp158_;
23206 BalaList* _tmp159_;
23207 BalaList* _tmp160_;
23208 gint _param_size = 0;
23209 BalaList* _tmp161_;
23210 gint _tmp162_;
23211 gint _tmp163_;
23212 gint _param_index = 0;
23213 _tmp157_ = bala_ccode_base_module_get_current_method (self);
23214 _tmp158_ = _tmp157_;
23215 _tmp159_ = bala_callable_get_parameters ((BalaCallable*) _tmp158_);
23216 _tmp160_ = _bala_iterable_ref0 (_tmp159_);
23217 _param_list = _tmp160_;
23218 _tmp161_ = _param_list;
23219 _tmp162_ = bala_collection_get_size ((BalaCollection*) _tmp161_);
23220 _tmp163_ = _tmp162_;
23221 _param_size = _tmp163_;
23222 _param_index = -1;
23223 while (TRUE(!(0))) {
23224 gint _tmp164_;
23225 gint _tmp165_;
23226 BalaParameter* param = NULL((void*)0);
23227 BalaList* _tmp166_;
23228 gpointer _tmp167_;
23229 BalaParameter* _tmp168_;
23230 BalaParameterDirection _tmp169_;
23231 BalaParameterDirection _tmp170_;
23232 BalaParameter* _tmp171_;
23233 _param_index = _param_index + 1;
23234 _tmp164_ = _param_index;
23235 _tmp165_ = _param_size;
23236 if (!(_tmp164_ < _tmp165_)) {
23237 break;
23238 }
23239 _tmp166_ = _param_list;
23240 _tmp167_ = bala_list_get (_tmp166_, _param_index);
23241 param = (BalaParameter*) _tmp167_;
23242 _tmp168_ = param;
23243 _tmp169_ = bala_parameter_get_direction (_tmp168_);
23244 _tmp170_ = _tmp169_;
23245 if (_tmp170_ != BALA_PARAMETER_DIRECTION_OUT) {
23246 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
23247 continue;
23248 }
23249 _tmp171_ = param;
23250 bala_ccode_base_module_return_out_parameter (self, _tmp171_);
23251 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
23252 }
23253 _bala_iterable_unref0 (_param_list)((_param_list == ((void*)0)) ? ((void*)0) : (_param_list = (bala_iterable_unref
(_param_list), ((void*)0))))
;
23254 }
23255 }
23256 _tmp173_ = bala_ccode_base_module_get_current_method (self);
23257 _tmp174_ = _tmp173_;
23258 if (_tmp174_ != NULL((void*)0)) {
23259 BalaMethod* _tmp175_;
23260 BalaMethod* _tmp176_;
23261 BalaAttribute* _tmp177_;
23262 _tmp175_ = bala_ccode_base_module_get_current_method (self);
23263 _tmp176_ = _tmp175_;
23264 _tmp177_ = bala_code_node_get_attribute ((BalaCodeNode*) _tmp176_, "Profile");
23265 _tmp172_ = _tmp177_ != NULL((void*)0);
23266 } else {
23267 _tmp172_ = FALSE(0);
23268 }
23269 if (_tmp172_) {
23270 gchar* prefix = NULL((void*)0);
23271 BalaMethod* _tmp178_;
23272 BalaMethod* _tmp179_;
23273 gchar* _tmp180_;
23274 gchar* _tmp181_;
23275 gchar* _tmp182_;
23276 gchar* _tmp183_;
23277 BalaCCodeIdentifier* level = NULL((void*)0);
23278 const gchar* _tmp184_;
23279 gchar* _tmp185_;
23280 gchar* _tmp186_;
23281 BalaCCodeIdentifier* _tmp187_;
23282 BalaCCodeIdentifier* _tmp188_;
23283 BalaCCodeFunction* _tmp189_;
23284 BalaCCodeFunction* _tmp190_;
23285 BalaCCodeIdentifier* _tmp191_;
23286 BalaCCodeUnaryExpression* _tmp192_;
23287 BalaCCodeUnaryExpression* _tmp193_;
23288 BalaCCodeUnaryExpression* _tmp194_;
23289 BalaCCodeUnaryExpression* _tmp195_;
23290 BalaCCodeIdentifier* timer = NULL((void*)0);
23291 const gchar* _tmp196_;
23292 gchar* _tmp197_;
23293 gchar* _tmp198_;
23294 BalaCCodeIdentifier* _tmp199_;
23295 BalaCCodeIdentifier* _tmp200_;
23296 BalaCCodeFunctionCall* stop_call = NULL((void*)0);
23297 BalaCCodeIdentifier* _tmp201_;
23298 BalaCCodeIdentifier* _tmp202_;
23299 BalaCCodeFunctionCall* _tmp203_;
23300 BalaCCodeFunctionCall* _tmp204_;
23301 BalaCCodeFunctionCall* _tmp205_;
23302 BalaCCodeIdentifier* _tmp206_;
23303 BalaCCodeFunction* _tmp207_;
23304 BalaCCodeFunction* _tmp208_;
23305 BalaCCodeFunctionCall* _tmp209_;
23306 BalaCCodeFunction* _tmp210_;
23307 BalaCCodeFunction* _tmp211_;
23308 _tmp178_ = bala_ccode_base_module_get_current_method (self);
23309 _tmp179_ = _tmp178_;
23310 _tmp180_ = bala_get_ccode_real_name ((BalaSymbol*) _tmp179_);
23311 _tmp181_ = _tmp180_;
23312 _tmp182_ = g_strdup_printf ("_bala_prof_%s", _tmp181_);
23313 _tmp183_ = _tmp182_;
23314 _g_free0 (_tmp181_)(_tmp181_ = (g_free (_tmp181_), ((void*)0)));
23315 prefix = _tmp183_;
23316 _tmp184_ = prefix;
23317 _tmp185_ = g_strconcat (_tmp184_, "_level", NULL((void*)0));
23318 _tmp186_ = _tmp185_;
23319 _tmp187_ = bala_ccode_identifier_new (_tmp186_);
23320 _tmp188_ = _tmp187_;
23321 _g_free0 (_tmp186_)(_tmp186_ = (g_free (_tmp186_), ((void*)0)));
23322 level = _tmp188_;
23323 _tmp189_ = bala_ccode_base_module_get_ccode (self);
23324 _tmp190_ = _tmp189_;
23325 _tmp191_ = level;
23326 _tmp192_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT, (BalaCCodeExpression*) _tmp191_);
23327 _tmp193_ = _tmp192_;
23328 _tmp194_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (BalaCCodeExpression*) _tmp193_);
23329 _tmp195_ = _tmp194_;
23330 bala_ccode_function_open_if (_tmp190_, (BalaCCodeExpression*) _tmp195_);
23331 _bala_ccode_node_unref0 (_tmp195_)((_tmp195_ == ((void*)0)) ? ((void*)0) : (_tmp195_ = (bala_ccode_node_unref
(_tmp195_), ((void*)0))))
;
23332 _bala_ccode_node_unref0 (_tmp193_)((_tmp193_ == ((void*)0)) ? ((void*)0) : (_tmp193_ = (bala_ccode_node_unref
(_tmp193_), ((void*)0))))
;
23333 _tmp196_ = prefix;
23334 _tmp197_ = g_strconcat (_tmp196_, "_timer", NULL((void*)0));
23335 _tmp198_ = _tmp197_;
23336 _tmp199_ = bala_ccode_identifier_new (_tmp198_);
23337 _tmp200_ = _tmp199_;
23338 _g_free0 (_tmp198_)(_tmp198_ = (g_free (_tmp198_), ((void*)0)));
23339 timer = _tmp200_;
23340 _tmp201_ = bala_ccode_identifier_new ("g_timer_stop");
23341 _tmp202_ = _tmp201_;
23342 _tmp203_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp202_);
23343 _tmp204_ = _tmp203_;
23344 _bala_ccode_node_unref0 (_tmp202_)((_tmp202_ == ((void*)0)) ? ((void*)0) : (_tmp202_ = (bala_ccode_node_unref
(_tmp202_), ((void*)0))))
;
23345 stop_call = _tmp204_;
23346 _tmp205_ = stop_call;
23347 _tmp206_ = timer;
23348 bala_ccode_function_call_add_argument (_tmp205_, (BalaCCodeExpression*) _tmp206_);
23349 _tmp207_ = bala_ccode_base_module_get_ccode (self);
23350 _tmp208_ = _tmp207_;
23351 _tmp209_ = stop_call;
23352 bala_ccode_function_add_expression (_tmp208_, (BalaCCodeExpression*) _tmp209_);
23353 _tmp210_ = bala_ccode_base_module_get_ccode (self);
23354 _tmp211_ = _tmp210_;
23355 bala_ccode_function_close (_tmp211_);
23356 _bala_ccode_node_unref0 (stop_call)((stop_call == ((void*)0)) ? ((void*)0) : (stop_call = (bala_ccode_node_unref
(stop_call), ((void*)0))))
;
23357 _bala_ccode_node_unref0 (timer)((timer == ((void*)0)) ? ((void*)0) : (timer = (bala_ccode_node_unref
(timer), ((void*)0))))
;
23358 _bala_ccode_node_unref0 (level)((level == ((void*)0)) ? ((void*)0) : (level = (bala_ccode_node_unref
(level), ((void*)0))))
;
23359 _g_free0 (prefix)(prefix = (g_free (prefix), ((void*)0)));
23360 }
23361 if (bala_ccode_base_module_is_in_constructor (self)) {
23362 BalaCCodeFunction* _tmp212_;
23363 BalaCCodeFunction* _tmp213_;
23364 BalaCCodeIdentifier* _tmp214_;
23365 BalaCCodeIdentifier* _tmp215_;
23366 _tmp212_ = bala_ccode_base_module_get_ccode (self);
23367 _tmp213_ = _tmp212_;
23368 _tmp214_ = bala_ccode_identifier_new ("obj");
23369 _tmp215_ = _tmp214_;
23370 bala_ccode_function_add_return (_tmp213_, (BalaCCodeExpression*) _tmp215_);
23371 _bala_ccode_node_unref0 (_tmp215_)((_tmp215_ == ((void*)0)) ? ((void*)0) : (_tmp215_ = (bala_ccode_node_unref
(_tmp215_), ((void*)0))))
;
23372 } else {
23373 if (bala_ccode_base_module_is_in_destructor (self)) {
23374 BalaCCodeFunction* _tmp216_;
23375 BalaCCodeFunction* _tmp217_;
23376 _tmp216_ = bala_ccode_base_module_get_ccode (self);
23377 _tmp217_ = _tmp216_;
23378 bala_ccode_function_add_goto (_tmp217_, "_return");
23379 } else {
23380 if (bala_ccode_base_module_is_in_coroutine (self)) {
23381 } else {
23382 BalaMethod* _tmp218_;
23383 BalaMethod* _tmp219_;
23384 _tmp218_ = bala_ccode_base_module_get_current_method (self);
23385 _tmp219_ = _tmp218_;
23386 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp219_, BALA_TYPE_CREATION_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp219_); GType __t = ((bala_creation_method_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
23387 BalaCCodeFunction* _tmp220_;
23388 BalaCCodeFunction* _tmp221_;
23389 BalaCCodeIdentifier* _tmp222_;
23390 BalaCCodeIdentifier* _tmp223_;
23391 _tmp220_ = bala_ccode_base_module_get_ccode (self);
23392 _tmp221_ = _tmp220_;
23393 _tmp222_ = bala_ccode_identifier_new ("self");
23394 _tmp223_ = _tmp222_;
23395 bala_ccode_function_add_return (_tmp221_, (BalaCCodeExpression*) _tmp223_);
23396 _bala_ccode_node_unref0 (_tmp223_)((_tmp223_ == ((void*)0)) ? ((void*)0) : (_tmp223_ = (bala_ccode_node_unref
(_tmp223_), ((void*)0))))
;
23397 } else {
23398 gboolean _tmp224_ = FALSE(0);
23399 BalaDataType* _tmp225_;
23400 BalaDataType* _tmp226_;
23401 _tmp225_ = bala_ccode_base_module_get_current_return_type (self);
23402 _tmp226_ = _tmp225_;
23403 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp226_, BALA_TYPE_VOID_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp226_); GType __t = ((bala_void_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
23404 _tmp224_ = TRUE(!(0));
23405 } else {
23406 BalaDataType* _tmp227_;
23407 BalaDataType* _tmp228_;
23408 _tmp227_ = bala_ccode_base_module_get_current_return_type (self);
23409 _tmp228_ = _tmp227_;
23410 _tmp224_ = bala_data_type_is_real_non_null_struct_type (_tmp228_);
23411 }
23412 if (_tmp224_) {
23413 BalaCCodeFunction* _tmp229_;
23414 BalaCCodeFunction* _tmp230_;
23415 _tmp229_ = bala_ccode_base_module_get_ccode (self);
23416 _tmp230_ = _tmp229_;
23417 bala_ccode_function_add_return (_tmp230_, NULL((void*)0));
23418 } else {
23419 BalaCCodeFunction* _tmp231_;
23420 BalaCCodeFunction* _tmp232_;
23421 BalaCCodeIdentifier* _tmp233_;
23422 BalaCCodeIdentifier* _tmp234_;
23423 _tmp231_ = bala_ccode_base_module_get_ccode (self);
23424 _tmp232_ = _tmp231_;
23425 _tmp233_ = bala_ccode_identifier_new ("result");
23426 _tmp234_ = _tmp233_;
23427 bala_ccode_function_add_return (_tmp232_, (BalaCCodeExpression*) _tmp234_);
23428 _bala_ccode_node_unref0 (_tmp234_)((_tmp234_ == ((void*)0)) ? ((void*)0) : (_tmp234_ = (bala_ccode_node_unref
(_tmp234_), ((void*)0))))
;
23429 }
23430 }
23431 }
23432 }
23433 }
23434 _tmp235_ = return_expression_symbol;
23435 if (_tmp235_ != NULL((void*)0)) {
23436 BalaSymbol* _tmp236_;
23437 _tmp236_ = return_expression_symbol;
23438 bala_symbol_set_active (_tmp236_, TRUE(!(0)));
23439 }
23440 bala_ccode_base_module_set_current_method_return (self, TRUE(!(0)));
23441 _bala_code_node_unref0 (return_expression_symbol)((return_expression_symbol == ((void*)0)) ? ((void*)0) : (return_expression_symbol
= (bala_code_node_unref (return_expression_symbol), ((void*)
0))))
;
23442}
23443
23444static gchar*
23445string_replace (const gchar* self,
23446 const gchar* old,
23447 const gchar* replacement)
23448{
23449 gboolean _tmp0_ = FALSE(0);
23450 gboolean _tmp1_ = FALSE(0);
23451 GError* _inner_error0_ = NULL((void*)0);
23452 gchar* result = NULL((void*)0);
23453 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
23454 g_return_val_if_fail (old != NULL, NULL)do { if ((old != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "old != NULL")
; return (((void*)0)); } } while (0)
;
23455 g_return_val_if_fail (replacement != NULL, NULL)do { if ((replacement != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "replacement != NULL"
); return (((void*)0)); } } while (0)
;
23456 if ((*((gchar*) self)) == '\0') {
23457 _tmp1_ = TRUE(!(0));
23458 } else {
23459 _tmp1_ = (*((gchar*) old)) == '\0';
23460 }
23461 if (_tmp1_) {
23462 _tmp0_ = TRUE(!(0));
23463 } else {
23464 _tmp0_ = g_strcmp0 (old, replacement) == 0;
23465 }
23466 if (_tmp0_) {
23467 gchar* _tmp2_;
23468 _tmp2_ = g_strdup (self);
23469 result = _tmp2_;
23470 return result;
23471 }
23472 {
23473 GRegex* regex = NULL((void*)0);
23474 gchar* _tmp3_;
23475 gchar* _tmp4_;
23476 GRegex* _tmp5_;
23477 GRegex* _tmp6_;
23478 gchar* _tmp7_ = NULL((void*)0);
23479 GRegex* _tmp8_;
23480 gchar* _tmp9_;
23481 gchar* _tmp10_;
23482 _tmp3_ = g_regex_escape_string (old, -1);
23483 _tmp4_ = _tmp3_;
23484 _tmp5_ = g_regex_new (_tmp4_, 0, 0, &_inner_error0_);
23485 _tmp6_ = _tmp5_;
23486 _g_free0 (_tmp4_)(_tmp4_ = (g_free (_tmp4_), ((void*)0)));
23487 regex = _tmp6_;
23488 if (G_UNLIKELY (_inner_error0_ != NULL)(_inner_error0_ != ((void*)0))) {
23489 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
23490 _g_regex_unref0 (regex)((regex == ((void*)0)) ? ((void*)0) : (regex = (g_regex_unref
(regex), ((void*)0))))
;
23491 if (_inner_error0_->domain == G_REGEX_ERRORg_regex_error_quark ()) {
23492 goto __catch0_g_regex_error;
23493 }
23494 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__"balaccodebasemodule.c", __LINE__23494, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
23495 g_clear_error (&_inner_error0_);
23496 return NULL((void*)0);
23497 }
23498 _tmp8_ = regex;
23499 _tmp9_ = g_regex_replace_literal (_tmp8_, self, (gssize) -1, 0, replacement, 0, &_inner_error0_);
23500 _tmp7_ = _tmp9_;
23501 if (G_UNLIKELY (_inner_error0_ != NULL)(_inner_error0_ != ((void*)0))) {
23502 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
23503 _g_regex_unref0 (regex)((regex == ((void*)0)) ? ((void*)0) : (regex = (g_regex_unref
(regex), ((void*)0))))
;
23504 if (_inner_error0_->domain == G_REGEX_ERRORg_regex_error_quark ()) {
23505 goto __catch0_g_regex_error;
23506 }
23507 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__"balaccodebasemodule.c", __LINE__23507, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
23508 g_clear_error (&_inner_error0_);
23509 return NULL((void*)0);
23510 }
23511 _tmp10_ = _tmp7_;
23512 _tmp7_ = NULL((void*)0);
23513 result = _tmp10_;
23514 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
23515 _g_regex_unref0 (regex)((regex == ((void*)0)) ? ((void*)0) : (regex = (g_regex_unref
(regex), ((void*)0))))
;
23516 return result;
23517 }
23518 goto __finally0;
23519 __catch0_g_regex_error:
23520 {
23521 g_clear_error (&_inner_error0_);
23522 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 23522, ((const char*) (__func__)), ((void*)0)); } while (0)
;
23523 }
23524 __finally0:
23525 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__"balaccodebasemodule.c", __LINE__23525, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
23526 g_clear_error (&_inner_error0_);
23527 return NULL((void*)0);
23528}
23529
23530gchar*
23531bala_ccode_base_module_get_symbol_lock_name (BalaCCodeBaseModule* self,
23532 const gchar* symname)
23533{
23534 gchar* _tmp0_;
23535 gchar* _tmp1_;
23536 gchar* _tmp2_;
23537 gchar* _tmp3_;
23538 gchar* result = NULL((void*)0);
23539 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
23540 g_return_val_if_fail (symname != NULL, NULL)do { if ((symname != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "symname != NULL"
); return (((void*)0)); } } while (0)
;
23541 _tmp0_ = string_replace (symname, "-", "_");
23542 _tmp1_ = _tmp0_;
23543 _tmp2_ = g_strdup_printf ("__lock_%s", _tmp1_);
23544 _tmp3_ = _tmp2_;
23545 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
23546 result = _tmp3_;
23547 return result;
23548}
23549
23550static BalaCCodeExpression*
23551bala_ccode_base_module_get_lock_expression (BalaCCodeBaseModule* self,
23552 BalaStatement* stmt,
23553 BalaExpression* resource)
23554{
23555 BalaCCodeExpression* l = NULL((void*)0);
23556 BalaExpression* inner_node = NULL((void*)0);
23557 BalaExpression* _tmp0_;
23558 BalaExpression* _tmp1_;
23559 BalaExpression* _tmp2_;
23560 BalaSymbol* member = NULL((void*)0);
23561 BalaSymbol* _tmp3_;
23562 BalaSymbol* _tmp4_;
23563 BalaSymbol* _tmp5_;
23564 BalaTypeSymbol* parent = NULL((void*)0);
23565 BalaSymbol* _tmp6_;
23566 BalaSymbol* _tmp7_;
23567 BalaSymbol* _tmp8_;
23568 BalaSymbol* _tmp9_;
23569 BalaTypeSymbol* _tmp10_;
23570 BalaSymbol* _tmp11_;
23571 BalaCCodeExpression* result = NULL((void*)0);
23572 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
23573 g_return_val_if_fail (stmt != NULL, NULL)do { if ((stmt != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "stmt != NULL"
); return (((void*)0)); } } while (0)
;
23574 g_return_val_if_fail (resource != NULL, NULL)do { if ((resource != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "resource != NULL"
); return (((void*)0)); } } while (0)
;
23575 l = NULL((void*)0);
23576 _tmp0_ = bala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (resource, BALA_TYPE_MEMBER_ACCESS, BalaMemberAccess)(((BalaMemberAccess*) g_type_check_instance_cast ((GTypeInstance
*) (resource), ((bala_member_access_get_type ())))))
);
23577 _tmp1_ = _tmp0_;
23578 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
23579 inner_node = _tmp2_;
23580 _tmp3_ = bala_expression_get_symbol_reference (resource);
23581 _tmp4_ = _tmp3_;
23582 _tmp5_ = _bala_code_node_ref0 (_tmp4_);
23583 member = _tmp5_;
23584 _tmp6_ = bala_expression_get_symbol_reference (resource);
23585 _tmp7_ = _tmp6_;
23586 _tmp8_ = bala_symbol_get_parent_symbol (_tmp7_);
23587 _tmp9_ = _tmp8_;
23588 _tmp10_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp9_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp9_), ((bala_typesymbol_get_type ())))))
);
23589 parent = _tmp10_;
23590 _tmp11_ = member;
23591 if (bala_symbol_is_instance_member (_tmp11_)) {
23592 BalaExpression* _tmp12_;
23593 BalaCCodeExpression* _tmp24_;
23594 BalaCCodeMemberAccess* _tmp25_;
23595 BalaCCodeMemberAccess* _tmp26_;
23596 BalaSymbol* _tmp27_;
23597 gchar* _tmp28_;
23598 gchar* _tmp29_;
23599 gchar* _tmp30_;
23600 gchar* _tmp31_;
23601 BalaCCodeMemberAccess* _tmp32_;
23602 _tmp12_ = inner_node;
23603 if (_tmp12_ == NULL((void*)0)) {
23604 BalaCCodeIdentifier* _tmp13_;
23605 _tmp13_ = bala_ccode_identifier_new ("self");
23606 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23607 l = (BalaCCodeExpression*) _tmp13_;
23608 } else {
23609 BalaTypeSymbol* _tmp14_;
23610 BalaTypeSymbol* _tmp15_;
23611 BalaTypeSymbol* _tmp16_;
23612 _tmp14_ = parent;
23613 _tmp15_ = bala_ccode_base_module_get_current_type_symbol (self);
23614 _tmp16_ = _tmp15_;
23615 if (_tmp14_ != _tmp16_) {
23616 BalaExpression* _tmp17_;
23617 BalaCCodeExpression* _tmp18_;
23618 BalaTypeSymbol* _tmp19_;
23619 BalaCCodeFunctionCall* _tmp20_;
23620 _tmp17_ = inner_node;
23621 _tmp18_ = bala_get_cvalue (_tmp17_);
23622 _tmp19_ = parent;
23623 _tmp20_ = bala_ccode_base_module_generate_instance_cast (self, _tmp18_, _tmp19_);
23624 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23625 l = (BalaCCodeExpression*) _tmp20_;
23626 } else {
23627 BalaExpression* _tmp21_;
23628 BalaCCodeExpression* _tmp22_;
23629 BalaCCodeExpression* _tmp23_;
23630 _tmp21_ = inner_node;
23631 _tmp22_ = bala_get_cvalue (_tmp21_);
23632 _tmp23_ = _bala_ccode_node_ref0 (_tmp22_);
23633 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23634 l = _tmp23_;
23635 }
23636 }
23637 _tmp24_ = l;
23638 _tmp25_ = bala_ccode_member_access_new_pointer (_tmp24_, "priv");
23639 _tmp26_ = _tmp25_;
23640 _tmp27_ = member;
23641 _tmp28_ = bala_get_ccode_name ((BalaCodeNode*) _tmp27_);
23642 _tmp29_ = _tmp28_;
23643 _tmp30_ = bala_ccode_base_module_get_symbol_lock_name (self, _tmp29_);
23644 _tmp31_ = _tmp30_;
23645 _tmp32_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp26_, _tmp31_);
23646 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23647 l = (BalaCCodeExpression*) _tmp32_;
23648 _g_free0 (_tmp31_)(_tmp31_ = (g_free (_tmp31_), ((void*)0)));
23649 _g_free0 (_tmp29_)(_tmp29_ = (g_free (_tmp29_), ((void*)0)));
23650 _bala_ccode_node_unref0 (_tmp26_)((_tmp26_ == ((void*)0)) ? ((void*)0) : (_tmp26_ = (bala_ccode_node_unref
(_tmp26_), ((void*)0))))
;
23651 } else {
23652 BalaSymbol* _tmp33_;
23653 _tmp33_ = member;
23654 if (bala_symbol_is_class_member (_tmp33_)) {
23655 BalaCCodeExpression* klass = NULL((void*)0);
23656 BalaDataType* _tmp34_;
23657 BalaCCodeFunctionCall* get_class_private_call = NULL((void*)0);
23658 BalaTypeSymbol* _tmp45_;
23659 gchar* _tmp46_;
23660 gchar* _tmp47_;
23661 BalaCCodeIdentifier* _tmp48_;
23662 BalaCCodeIdentifier* _tmp49_;
23663 BalaCCodeFunctionCall* _tmp50_;
23664 BalaCCodeFunctionCall* _tmp51_;
23665 BalaCCodeFunctionCall* _tmp52_;
23666 BalaCCodeExpression* _tmp53_;
23667 BalaCCodeFunctionCall* _tmp54_;
23668 BalaSymbol* _tmp55_;
23669 gchar* _tmp56_;
23670 gchar* _tmp57_;
23671 gchar* _tmp58_;
23672 gchar* _tmp59_;
23673 BalaCCodeMemberAccess* _tmp60_;
23674 _tmp34_ = bala_ccode_base_module_get_this_type (self);
23675 if (_tmp34_ != NULL((void*)0)) {
23676 BalaCCodeFunctionCall* k = NULL((void*)0);
23677 BalaCCodeIdentifier* _tmp35_;
23678 BalaCCodeIdentifier* _tmp36_;
23679 BalaCCodeFunctionCall* _tmp37_;
23680 BalaCCodeFunctionCall* _tmp38_;
23681 BalaCCodeFunctionCall* _tmp39_;
23682 BalaCCodeIdentifier* _tmp40_;
23683 BalaCCodeIdentifier* _tmp41_;
23684 BalaCCodeFunctionCall* _tmp42_;
23685 BalaCCodeExpression* _tmp43_;
23686 _tmp35_ = bala_ccode_identifier_new ("G_OBJECT_GET_CLASS");
23687 _tmp36_ = _tmp35_;
23688 _tmp37_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp36_);
23689 _tmp38_ = _tmp37_;
23690 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
23691 k = _tmp38_;
23692 _tmp39_ = k;
23693 _tmp40_ = bala_ccode_identifier_new ("self");
23694 _tmp41_ = _tmp40_;
23695 bala_ccode_function_call_add_argument (_tmp39_, (BalaCCodeExpression*) _tmp41_);
23696 _bala_ccode_node_unref0 (_tmp41_)((_tmp41_ == ((void*)0)) ? ((void*)0) : (_tmp41_ = (bala_ccode_node_unref
(_tmp41_), ((void*)0))))
;
23697 _tmp42_ = k;
23698 _tmp43_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp42_);
23699 _bala_ccode_node_unref0 (klass)((klass == ((void*)0)) ? ((void*)0) : (klass = (bala_ccode_node_unref
(klass), ((void*)0))))
;
23700 klass = _tmp43_;
23701 _bala_ccode_node_unref0 (k)((k == ((void*)0)) ? ((void*)0) : (k = (bala_ccode_node_unref
(k), ((void*)0))))
;
23702 } else {
23703 BalaCCodeIdentifier* _tmp44_;
23704 _tmp44_ = bala_ccode_identifier_new ("klass");
23705 _bala_ccode_node_unref0 (klass)((klass == ((void*)0)) ? ((void*)0) : (klass = (bala_ccode_node_unref
(klass), ((void*)0))))
;
23706 klass = (BalaCCodeExpression*) _tmp44_;
23707 }
23708 _tmp45_ = parent;
23709 _tmp46_ = bala_get_ccode_class_get_private_function (G_TYPE_CHECK_INSTANCE_CAST (_tmp45_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp45_), ((bala_class_get_type ())))))
);
23710 _tmp47_ = _tmp46_;
23711 _tmp48_ = bala_ccode_identifier_new (_tmp47_);
23712 _tmp49_ = _tmp48_;
23713 _tmp50_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp49_);
23714 _tmp51_ = _tmp50_;
23715 _bala_ccode_node_unref0 (_tmp49_)((_tmp49_ == ((void*)0)) ? ((void*)0) : (_tmp49_ = (bala_ccode_node_unref
(_tmp49_), ((void*)0))))
;
23716 _g_free0 (_tmp47_)(_tmp47_ = (g_free (_tmp47_), ((void*)0)));
23717 get_class_private_call = _tmp51_;
23718 _tmp52_ = get_class_private_call;
23719 _tmp53_ = klass;
23720 bala_ccode_function_call_add_argument (_tmp52_, _tmp53_);
23721 _tmp54_ = get_class_private_call;
23722 _tmp55_ = member;
23723 _tmp56_ = bala_get_ccode_name ((BalaCodeNode*) _tmp55_);
23724 _tmp57_ = _tmp56_;
23725 _tmp58_ = bala_ccode_base_module_get_symbol_lock_name (self, _tmp57_);
23726 _tmp59_ = _tmp58_;
23727 _tmp60_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp54_, _tmp59_);
23728 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23729 l = (BalaCCodeExpression*) _tmp60_;
23730 _g_free0 (_tmp59_)(_tmp59_ = (g_free (_tmp59_), ((void*)0)));
23731 _g_free0 (_tmp57_)(_tmp57_ = (g_free (_tmp57_), ((void*)0)));
23732 _bala_ccode_node_unref0 (get_class_private_call)((get_class_private_call == ((void*)0)) ? ((void*)0) : (get_class_private_call
= (bala_ccode_node_unref (get_class_private_call), ((void*)0
))))
;
23733 _bala_ccode_node_unref0 (klass)((klass == ((void*)0)) ? ((void*)0) : (klass = (bala_ccode_node_unref
(klass), ((void*)0))))
;
23734 } else {
23735 gchar* lock_name = NULL((void*)0);
23736 BalaTypeSymbol* _tmp61_;
23737 gchar* _tmp62_;
23738 gchar* _tmp63_;
23739 BalaSymbol* _tmp64_;
23740 gchar* _tmp65_;
23741 gchar* _tmp66_;
23742 gchar* _tmp67_;
23743 gchar* _tmp68_;
23744 const gchar* _tmp69_;
23745 gchar* _tmp70_;
23746 gchar* _tmp71_;
23747 BalaCCodeIdentifier* _tmp72_;
23748 _tmp61_ = parent;
23749 _tmp62_ = bala_get_ccode_lower_case_name ((BalaCodeNode*) _tmp61_, NULL((void*)0));
23750 _tmp63_ = _tmp62_;
23751 _tmp64_ = member;
23752 _tmp65_ = bala_get_ccode_name ((BalaCodeNode*) _tmp64_);
23753 _tmp66_ = _tmp65_;
23754 _tmp67_ = g_strdup_printf ("%s_%s", _tmp63_, _tmp66_);
23755 _tmp68_ = _tmp67_;
23756 _g_free0 (_tmp66_)(_tmp66_ = (g_free (_tmp66_), ((void*)0)));
23757 _g_free0 (_tmp63_)(_tmp63_ = (g_free (_tmp63_), ((void*)0)));
23758 lock_name = _tmp68_;
23759 _tmp69_ = lock_name;
23760 _tmp70_ = bala_ccode_base_module_get_symbol_lock_name (self, _tmp69_);
23761 _tmp71_ = _tmp70_;
23762 _tmp72_ = bala_ccode_identifier_new (_tmp71_);
23763 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23764 l = (BalaCCodeExpression*) _tmp72_;
23765 _g_free0 (_tmp71_)(_tmp71_ = (g_free (_tmp71_), ((void*)0)));
23766 _g_free0 (lock_name)(lock_name = (g_free (lock_name), ((void*)0)));
23767 }
23768 }
23769 result = l;
23770 _bala_code_node_unref0 (parent)((parent == ((void*)0)) ? ((void*)0) : (parent = (bala_code_node_unref
(parent), ((void*)0))))
;
23771 _bala_code_node_unref0 (member)((member == ((void*)0)) ? ((void*)0) : (member = (bala_code_node_unref
(member), ((void*)0))))
;
23772 _bala_code_node_unref0 (inner_node)((inner_node == ((void*)0)) ? ((void*)0) : (inner_node = (bala_code_node_unref
(inner_node), ((void*)0))))
;
23773 return result;
23774}
23775
23776static void
23777bala_ccode_base_module_real_visit_lock_statement (BalaCodeVisitor* base,
23778 BalaLockStatement* stmt)
23779{
23780 BalaCCodeBaseModule * self;
23781 BalaCCodeExpression* l = NULL((void*)0);
23782 BalaExpression* _tmp0_;
23783 BalaExpression* _tmp1_;
23784 BalaCCodeExpression* _tmp2_;
23785 BalaCCodeFunctionCall* fc = NULL((void*)0);
23786 BalaStruct* _tmp3_;
23787 BalaScope* _tmp4_;
23788 BalaScope* _tmp5_;
23789 BalaSymbol* _tmp6_;
23790 BalaSymbol* _tmp7_;
23791 gchar* _tmp8_;
23792 gchar* _tmp9_;
23793 BalaCCodeIdentifier* _tmp10_;
23794 BalaCCodeIdentifier* _tmp11_;
23795 BalaCCodeFunctionCall* _tmp12_;
23796 BalaCCodeFunctionCall* _tmp13_;
23797 BalaCCodeUnaryExpression* _tmp14_;
23798 BalaCCodeUnaryExpression* _tmp15_;
23799 BalaCCodeFunction* _tmp16_;
23800 BalaCCodeFunction* _tmp17_;
23801 self = (BalaCCodeBaseModule*) base;
23802 g_return_if_fail (stmt != NULL)do { if ((stmt != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "stmt != NULL"
); return; } } while (0)
;
23803 _tmp0_ = bala_lock_statement_get_resource (stmt);
23804 _tmp1_ = _tmp0_;
23805 _tmp2_ = bala_ccode_base_module_get_lock_expression (self, (BalaStatement*) stmt, _tmp1_);
23806 l = _tmp2_;
23807 _tmp3_ = self->mutex_type;
23808 _tmp4_ = bala_symbol_get_scope ((BalaSymbol*) _tmp3_);
23809 _tmp5_ = _tmp4_;
23810 _tmp6_ = bala_scope_lookup (_tmp5_, "lock");
23811 _tmp7_ = _tmp6_;
23812 _tmp8_ = bala_get_ccode_name ((BalaCodeNode*) _tmp7_);
23813 _tmp9_ = _tmp8_;
23814 _tmp10_ = bala_ccode_identifier_new (_tmp9_);
23815 _tmp11_ = _tmp10_;
23816 _tmp12_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp11_);
23817 _tmp13_ = _tmp12_;
23818 _bala_ccode_node_unref0 (_tmp11_)((_tmp11_ == ((void*)0)) ? ((void*)0) : (_tmp11_ = (bala_ccode_node_unref
(_tmp11_), ((void*)0))))
;
23819 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
23820 _bala_code_node_unref0 (_tmp7_)((_tmp7_ == ((void*)0)) ? ((void*)0) : (_tmp7_ = (bala_code_node_unref
(_tmp7_), ((void*)0))))
;
23821 fc = _tmp13_;
23822 _tmp14_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, l);
23823 _tmp15_ = _tmp14_;
23824 bala_ccode_function_call_add_argument (fc, (BalaCCodeExpression*) _tmp15_);
23825 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
23826 _tmp16_ = bala_ccode_base_module_get_ccode (self);
23827 _tmp17_ = _tmp16_;
23828 bala_ccode_function_add_expression (_tmp17_, (BalaCCodeExpression*) fc);
23829 _bala_ccode_node_unref0 (fc)((fc == ((void*)0)) ? ((void*)0) : (fc = (bala_ccode_node_unref
(fc), ((void*)0))))
;
23830 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23831}
23832
23833static void
23834bala_ccode_base_module_real_visit_unlock_statement (BalaCodeVisitor* base,
23835 BalaUnlockStatement* stmt)
23836{
23837 BalaCCodeBaseModule * self;
23838 BalaCCodeExpression* l = NULL((void*)0);
23839 BalaExpression* _tmp0_;
23840 BalaExpression* _tmp1_;
23841 BalaCCodeExpression* _tmp2_;
23842 BalaCCodeFunctionCall* fc = NULL((void*)0);
23843 BalaStruct* _tmp3_;
23844 BalaScope* _tmp4_;
23845 BalaScope* _tmp5_;
23846 BalaSymbol* _tmp6_;
23847 BalaSymbol* _tmp7_;
23848 gchar* _tmp8_;
23849 gchar* _tmp9_;
23850 BalaCCodeIdentifier* _tmp10_;
23851 BalaCCodeIdentifier* _tmp11_;
23852 BalaCCodeFunctionCall* _tmp12_;
23853 BalaCCodeFunctionCall* _tmp13_;
23854 BalaCCodeUnaryExpression* _tmp14_;
23855 BalaCCodeUnaryExpression* _tmp15_;
23856 BalaCCodeFunction* _tmp16_;
23857 BalaCCodeFunction* _tmp17_;
23858 self = (BalaCCodeBaseModule*) base;
23859 g_return_if_fail (stmt != NULL)do { if ((stmt != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "stmt != NULL"
); return; } } while (0)
;
23860 _tmp0_ = bala_unlock_statement_get_resource (stmt);
23861 _tmp1_ = _tmp0_;
23862 _tmp2_ = bala_ccode_base_module_get_lock_expression (self, (BalaStatement*) stmt, _tmp1_);
23863 l = _tmp2_;
23864 _tmp3_ = self->mutex_type;
23865 _tmp4_ = bala_symbol_get_scope ((BalaSymbol*) _tmp3_);
23866 _tmp5_ = _tmp4_;
23867 _tmp6_ = bala_scope_lookup (_tmp5_, "unlock");
23868 _tmp7_ = _tmp6_;
23869 _tmp8_ = bala_get_ccode_name ((BalaCodeNode*) _tmp7_);
23870 _tmp9_ = _tmp8_;
23871 _tmp10_ = bala_ccode_identifier_new (_tmp9_);
23872 _tmp11_ = _tmp10_;
23873 _tmp12_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp11_);
23874 _tmp13_ = _tmp12_;
23875 _bala_ccode_node_unref0 (_tmp11_)((_tmp11_ == ((void*)0)) ? ((void*)0) : (_tmp11_ = (bala_ccode_node_unref
(_tmp11_), ((void*)0))))
;
23876 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
23877 _bala_code_node_unref0 (_tmp7_)((_tmp7_ == ((void*)0)) ? ((void*)0) : (_tmp7_ = (bala_code_node_unref
(_tmp7_), ((void*)0))))
;
23878 fc = _tmp13_;
23879 _tmp14_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, l);
23880 _tmp15_ = _tmp14_;
23881 bala_ccode_function_call_add_argument (fc, (BalaCCodeExpression*) _tmp15_);
23882 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
23883 _tmp16_ = bala_ccode_base_module_get_ccode (self);
23884 _tmp17_ = _tmp16_;
23885 bala_ccode_function_add_expression (_tmp17_, (BalaCCodeExpression*) fc);
23886 _bala_ccode_node_unref0 (fc)((fc == ((void*)0)) ? ((void*)0) : (fc = (bala_ccode_node_unref
(fc), ((void*)0))))
;
23887 _bala_ccode_node_unref0 (l)((l == ((void*)0)) ? ((void*)0) : (l = (bala_ccode_node_unref
(l), ((void*)0))))
;
23888}
23889
23890static void
23891bala_ccode_base_module_real_visit_delete_statement (BalaCodeVisitor* base,
23892 BalaDeleteStatement* stmt)
23893{
23894 BalaCCodeBaseModule * self;
23895 BalaDataType* type = NULL((void*)0);
23896 BalaExpression* _tmp0_;
23897 BalaExpression* _tmp1_;
23898 BalaDataType* _tmp2_;
23899 BalaDataType* _tmp3_;
23900 BalaPointerType* pointer_type = NULL((void*)0);
23901 BalaDataType* _tmp4_;
23902 gboolean _tmp5_ = FALSE(0);
23903 gboolean _tmp6_ = FALSE(0);
23904 BalaPointerType* _tmp7_;
23905 BalaCCodeFunctionCall* ccall = NULL((void*)0);
23906 BalaDataType* _tmp21_;
23907 BalaCCodeExpression* _tmp22_;
23908 BalaCCodeExpression* _tmp23_;
23909 BalaCCodeFunctionCall* _tmp24_;
23910 BalaCCodeFunctionCall* _tmp25_;
23911 BalaExpression* _tmp26_;
23912 BalaExpression* _tmp27_;
23913 BalaCCodeExpression* _tmp28_;
23914 BalaCCodeFunction* _tmp29_;
23915 BalaCCodeFunction* _tmp30_;
23916 self = (BalaCCodeBaseModule*) base;
23917 g_return_if_fail (stmt != NULL)do { if ((stmt != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "stmt != NULL"
); return; } } while (0)
;
23918 _tmp0_ = bala_delete_statement_get_expression (stmt);
23919 _tmp1_ = _tmp0_;
23920 _tmp2_ = bala_expression_get_value_type (_tmp1_);
23921 _tmp3_ = _tmp2_;
23922 type = _tmp3_;
23923 _tmp4_ = type;
23924 pointer_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp4_, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp4_); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaPointerType*) _tmp4_) : NULL((void*)0);
23925 _tmp7_ = pointer_type;
23926 if (_tmp7_ != NULL((void*)0)) {
23927 BalaPointerType* _tmp8_;
23928 BalaDataType* _tmp9_;
23929 BalaDataType* _tmp10_;
23930 BalaTypeSymbol* _tmp11_;
23931 BalaTypeSymbol* _tmp12_;
23932 _tmp8_ = pointer_type;
23933 _tmp9_ = bala_pointer_type_get_base_type (_tmp8_);
23934 _tmp10_ = _tmp9_;
23935 _tmp11_ = bala_data_type_get_type_symbol (_tmp10_);
23936 _tmp12_ = _tmp11_;
23937 _tmp6_ = _tmp12_ != NULL((void*)0);
23938 } else {
23939 _tmp6_ = FALSE(0);
23940 }
23941 if (_tmp6_) {
23942 BalaPointerType* _tmp13_;
23943 BalaDataType* _tmp14_;
23944 BalaDataType* _tmp15_;
23945 BalaTypeSymbol* _tmp16_;
23946 BalaTypeSymbol* _tmp17_;
23947 _tmp13_ = pointer_type;
23948 _tmp14_ = bala_pointer_type_get_base_type (_tmp13_);
23949 _tmp15_ = _tmp14_;
23950 _tmp16_ = bala_data_type_get_type_symbol (_tmp15_);
23951 _tmp17_ = _tmp16_;
23952 _tmp5_ = bala_typesymbol_is_reference_type (_tmp17_);
23953 } else {
23954 _tmp5_ = FALSE(0);
23955 }
23956 if (_tmp5_) {
23957 BalaPointerType* _tmp18_;
23958 BalaDataType* _tmp19_;
23959 BalaDataType* _tmp20_;
23960 _tmp18_ = pointer_type;
23961 _tmp19_ = bala_pointer_type_get_base_type (_tmp18_);
23962 _tmp20_ = _tmp19_;
23963 type = _tmp20_;
23964 }
23965 _tmp21_ = type;
23966 _tmp22_ = bala_ccode_base_module_get_destroy_func_expression (self, _tmp21_, FALSE(0));
23967 _tmp23_ = _tmp22_;
23968 _tmp24_ = bala_ccode_function_call_new (_tmp23_);
23969 _tmp25_ = _tmp24_;
23970 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
23971 ccall = _tmp25_;
23972 _tmp26_ = bala_delete_statement_get_expression (stmt);
23973 _tmp27_ = _tmp26_;
23974 _tmp28_ = bala_get_cvalue (_tmp27_);
23975 bala_ccode_function_call_add_argument (ccall, _tmp28_);
23976 _tmp29_ = bala_ccode_base_module_get_ccode (self);
23977 _tmp30_ = _tmp29_;
23978 bala_ccode_function_add_expression (_tmp30_, (BalaCCodeExpression*) ccall);
23979 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
23980}
23981
23982static gboolean
23983bala_ccode_base_module_is_compact_class_destructor_call (BalaExpression* expr)
23984{
23985 BalaClass* cl = NULL((void*)0);
23986 BalaDataType* _tmp0_;
23987 BalaDataType* _tmp1_;
23988 BalaTypeSymbol* _tmp2_;
23989 BalaTypeSymbol* _tmp3_;
23990 gboolean _tmp4_ = FALSE(0);
23991 gboolean _tmp5_ = FALSE(0);
23992 BalaClass* _tmp6_;
23993 gboolean result = FALSE(0);
23994 g_return_val_if_fail (expr != NULL, FALSE)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return ((0)); } } while (0)
;
23995 _tmp0_ = bala_expression_get_value_type (expr);
23996 _tmp1_ = _tmp0_;
23997 _tmp2_ = bala_data_type_get_type_symbol (_tmp1_);
23998 _tmp3_ = _tmp2_;
23999 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp3_) : NULL((void*)0);
24000 _tmp6_ = cl;
24001 if (_tmp6_ != NULL((void*)0)) {
24002 BalaClass* _tmp7_;
24003 gboolean _tmp8_;
24004 gboolean _tmp9_;
24005 _tmp7_ = cl;
24006 _tmp8_ = bala_class_get_is_compact (_tmp7_);
24007 _tmp9_ = _tmp8_;
24008 _tmp5_ = _tmp9_;
24009 } else {
24010 _tmp5_ = FALSE(0);
24011 }
24012 if (_tmp5_) {
24013 BalaCodeNode* _tmp10_;
24014 BalaCodeNode* _tmp11_;
24015 _tmp10_ = bala_code_node_get_parent_node ((BalaCodeNode*) expr);
24016 _tmp11_ = _tmp10_;
24017 _tmp4_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, BALA_TYPE_MEMBER_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp11_); GType __t = ((bala_member_access_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
24018 } else {
24019 _tmp4_ = FALSE(0);
24020 }
24021 if (_tmp4_) {
24022 BalaMethodType* mt = NULL((void*)0);
24023 BalaCodeNode* _tmp12_;
24024 BalaCodeNode* _tmp13_;
24025 BalaDataType* _tmp14_;
24026 BalaDataType* _tmp15_;
24027 gboolean _tmp16_ = FALSE(0);
24028 gboolean _tmp17_ = FALSE(0);
24029 BalaMethodType* _tmp18_;
24030 _tmp12_ = bala_code_node_get_parent_node ((BalaCodeNode*) expr);
24031 _tmp13_ = _tmp12_;
24032 _tmp14_ = bala_expression_get_value_type ((BalaExpression*) G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, BALA_TYPE_MEMBER_ACCESS, BalaMemberAccess)(((BalaMemberAccess*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp13_), ((bala_member_access_get_type ())))))
);
24033 _tmp15_ = _tmp14_;
24034 mt = G_TYPE_CHECK_INSTANCE_TYPE (_tmp15_, BALA_TYPE_METHOD_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp15_); GType __t = ((bala_method_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaMethodType*) _tmp15_) : NULL((void*)0);
24035 _tmp18_ = mt;
24036 if (_tmp18_ != NULL((void*)0)) {
24037 BalaMethodType* _tmp19_;
24038 BalaMethod* _tmp20_;
24039 BalaMethod* _tmp21_;
24040 _tmp19_ = mt;
24041 _tmp20_ = bala_method_type_get_method_symbol (_tmp19_);
24042 _tmp21_ = _tmp20_;
24043 _tmp17_ = _tmp21_ != NULL((void*)0);
24044 } else {
24045 _tmp17_ = FALSE(0);
24046 }
24047 if (_tmp17_) {
24048 BalaMethodType* _tmp22_;
24049 BalaMethod* _tmp23_;
24050 BalaMethod* _tmp24_;
24051 BalaAttribute* _tmp25_;
24052 _tmp22_ = mt;
24053 _tmp23_ = bala_method_type_get_method_symbol (_tmp22_);
24054 _tmp24_ = _tmp23_;
24055 _tmp25_ = bala_code_node_get_attribute ((BalaCodeNode*) _tmp24_, "DestroysInstance");
24056 _tmp16_ = _tmp25_ != NULL((void*)0);
24057 } else {
24058 _tmp16_ = FALSE(0);
24059 }
24060 if (_tmp16_) {
24061 result = TRUE(!(0));
24062 return result;
24063 }
24064 }
24065 result = FALSE(0);
24066 return result;
24067}
24068
24069static void
24070bala_ccode_base_module_real_visit_expression (BalaCodeVisitor* base,
24071 BalaExpression* expr)
24072{
24073 BalaCCodeBaseModule * self;
24074 gboolean _tmp0_ = FALSE(0);
24075 BalaCCodeExpression* _tmp1_;
24076 self = (BalaCCodeBaseModule*) base;
24077 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24078 _tmp1_ = bala_get_cvalue (expr);
24079 if (_tmp1_ != NULL((void*)0)) {
24080 gboolean _tmp2_;
24081 gboolean _tmp3_;
24082 _tmp2_ = bala_expression_get_lvalue (expr);
24083 _tmp3_ = _tmp2_;
24084 _tmp0_ = !_tmp3_;
24085 } else {
24086 _tmp0_ = FALSE(0);
24087 }
24088 if (_tmp0_) {
24089 gboolean _tmp4_ = FALSE(0);
24090 BalaDataType* _tmp5_;
24091 BalaDataType* _tmp6_;
24092 BalaDataType* _tmp37_;
24093 BalaDataType* _tmp38_;
24094 BalaTargetValue* _tmp49_;
24095 BalaTargetValue* _tmp50_;
24096 gboolean _tmp51_ = FALSE(0);
24097 BalaDataType* _tmp52_;
24098 BalaDataType* _tmp53_;
24099 gboolean _tmp70_ = FALSE(0);
24100 BalaDataType* _tmp71_;
24101 BalaDataType* _tmp72_;
24102 _tmp5_ = bala_expression_get_formal_value_type (expr);
24103 _tmp6_ = _tmp5_;
24104 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp6_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
24105 BalaDataType* _tmp7_;
24106 BalaDataType* _tmp8_;
24107 _tmp7_ = bala_expression_get_value_type (expr);
24108 _tmp8_ = _tmp7_;
24109 _tmp4_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
24110 } else {
24111 _tmp4_ = FALSE(0);
24112 }
24113 if (_tmp4_) {
24114 BalaTypeParameter* type_parameter = NULL((void*)0);
24115 BalaDataType* _tmp9_;
24116 BalaDataType* _tmp10_;
24117 BalaTypeParameter* _tmp11_;
24118 BalaTypeParameter* _tmp12_;
24119 BalaTypeParameter* _tmp13_;
24120 BalaStruct* st = NULL((void*)0);
24121 BalaTypeParameter* _tmp14_;
24122 BalaSymbol* _tmp15_;
24123 BalaSymbol* _tmp16_;
24124 BalaSymbol* _tmp17_;
24125 BalaSymbol* _tmp18_;
24126 BalaStruct* _tmp19_;
24127 gboolean _tmp20_ = FALSE(0);
24128 BalaTypeParameter* _tmp21_;
24129 BalaSymbol* _tmp22_;
24130 BalaSymbol* _tmp23_;
24131 BalaTypeSymbol* _tmp24_;
24132 _tmp9_ = bala_expression_get_formal_value_type (expr);
24133 _tmp10_ = _tmp9_;
24134 _tmp11_ = bala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp10_, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp10_), ((bala_generic_type_get_type ())))))
);
24135 _tmp12_ = _tmp11_;
24136 _tmp13_ = _bala_code_node_ref0 (_tmp12_);
24137 type_parameter = _tmp13_;
24138 _tmp14_ = type_parameter;
24139 _tmp15_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp14_);
24140 _tmp16_ = _tmp15_;
24141 _tmp17_ = bala_symbol_get_parent_symbol (_tmp16_);
24142 _tmp18_ = _tmp17_;
24143 _tmp19_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp18_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp18_) : NULL((void*)0));
24144 st = _tmp19_;
24145 _tmp21_ = type_parameter;
24146 _tmp22_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp21_);
24147 _tmp23_ = _tmp22_;
24148 _tmp24_ = self->garray_type;
24149 if (_tmp23_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp24_, BALA_TYPE_SYMBOL, BalaSymbol)(((BalaSymbol*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp24_), ((bala_symbol_get_type ())))))
) {
24150 gboolean _tmp25_ = FALSE(0);
24151 BalaStruct* _tmp26_;
24152 _tmp26_ = st;
24153 if (_tmp26_ == NULL((void*)0)) {
24154 _tmp25_ = TRUE(!(0));
24155 } else {
24156 BalaStruct* _tmp27_;
24157 gchar* _tmp28_;
24158 gchar* _tmp29_;
24159 _tmp27_ = st;
24160 _tmp28_ = bala_get_ccode_name ((BalaCodeNode*) _tmp27_);
24161 _tmp29_ = _tmp28_;
24162 _tmp25_ = g_strcmp0 (_tmp29_, "va_list") != 0;
24163 _g_free0 (_tmp29_)(_tmp29_ = (g_free (_tmp29_), ((void*)0)));
24164 }
24165 _tmp20_ = _tmp25_;
24166 } else {
24167 _tmp20_ = FALSE(0);
24168 }
24169 if (_tmp20_) {
24170 BalaCCodeExpression* _tmp30_;
24171 BalaDataType* _tmp31_;
24172 BalaDataType* _tmp32_;
24173 BalaCCodeExpression* _tmp33_;
24174 BalaCCodeExpression* _tmp34_;
24175 BalaTargetValue* _tmp35_;
24176 BalaTargetValue* _tmp36_;
24177 _tmp30_ = bala_get_cvalue (expr);
24178 _tmp31_ = bala_expression_get_value_type (expr);
24179 _tmp32_ = _tmp31_;
24180 _tmp33_ = bala_ccode_base_module_convert_from_generic_pointer (self, _tmp30_, _tmp32_);
24181 _tmp34_ = _tmp33_;
24182 bala_set_cvalue (expr, _tmp34_);
24183 _bala_ccode_node_unref0 (_tmp34_)((_tmp34_ == ((void*)0)) ? ((void*)0) : (_tmp34_ = (bala_ccode_node_unref
(_tmp34_), ((void*)0))))
;
24184 _tmp35_ = bala_expression_get_target_value (expr);
24185 _tmp36_ = _tmp35_;
24186 G_TYPE_CHECK_INSTANCE_CAST (_tmp36_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp36_), ((bala_glib_value_get_type ())))))
->lvalue = FALSE(0);
24187 }
24188 _bala_code_node_unref0 (st)((st == ((void*)0)) ? ((void*)0) : (st = (bala_code_node_unref
(st), ((void*)0))))
;
24189 _bala_code_node_unref0 (type_parameter)((type_parameter == ((void*)0)) ? ((void*)0) : (type_parameter
= (bala_code_node_unref (type_parameter), ((void*)0))))
;
24190 }
24191 _tmp37_ = bala_expression_get_value_type (expr);
24192 _tmp38_ = _tmp37_;
24193 if (_tmp38_ != NULL((void*)0)) {
24194 BalaTargetValue* _tmp39_;
24195 BalaTargetValue* _tmp40_;
24196 BalaDataType* _tmp41_;
24197 BalaDataType* _tmp42_;
24198 BalaTargetValue* _tmp43_;
24199 BalaTargetValue* _tmp44_;
24200 BalaDataType* _tmp45_;
24201 BalaDataType* _tmp46_;
24202 BalaTargetValue* _tmp47_;
24203 BalaTargetValue* _tmp48_;
24204 _tmp39_ = bala_expression_get_target_value (expr);
24205 _tmp40_ = _tmp39_;
24206 _tmp41_ = bala_expression_get_value_type (expr);
24207 _tmp42_ = _tmp41_;
24208 bala_target_value_set_value_type (_tmp40_, _tmp42_);
24209 _tmp43_ = bala_expression_get_target_value (expr);
24210 _tmp44_ = _tmp43_;
24211 _tmp45_ = bala_expression_get_target_type (expr);
24212 _tmp46_ = _tmp45_;
24213 _tmp47_ = bala_ccode_base_module_transform_value (self, _tmp44_, _tmp46_, (BalaCodeNode*) expr);
24214 _tmp48_ = _tmp47_;
24215 bala_expression_set_target_value (expr, _tmp48_);
24216 _bala_target_value_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_target_value_unref
(_tmp48_), ((void*)0))))
;
24217 }
24218 _tmp49_ = bala_expression_get_target_value (expr);
24219 _tmp50_ = _tmp49_;
24220 if (_tmp50_ == NULL((void*)0)) {
24221 return;
24222 }
24223 _tmp52_ = bala_expression_get_formal_target_type (expr);
24224 _tmp53_ = _tmp52_;
24225 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp53_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp53_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
24226 BalaDataType* _tmp54_;
24227 BalaDataType* _tmp55_;
24228 _tmp54_ = bala_expression_get_target_type (expr);
24229 _tmp55_ = _tmp54_;
24230 _tmp51_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp55_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp55_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
24231 } else {
24232 _tmp51_ = FALSE(0);
24233 }
24234 if (_tmp51_) {
24235 BalaDataType* _tmp56_;
24236 BalaDataType* _tmp57_;
24237 BalaTypeParameter* _tmp58_;
24238 BalaTypeParameter* _tmp59_;
24239 BalaSymbol* _tmp60_;
24240 BalaSymbol* _tmp61_;
24241 BalaTypeSymbol* _tmp62_;
24242 _tmp56_ = bala_expression_get_formal_target_type (expr);
24243 _tmp57_ = _tmp56_;
24244 _tmp58_ = bala_generic_type_get_type_parameter (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp57_), ((bala_generic_type_get_type ())))))
);
24245 _tmp59_ = _tmp58_;
24246 _tmp60_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp59_);
24247 _tmp61_ = _tmp60_;
24248 _tmp62_ = self->garray_type;
24249 if (_tmp61_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp62_, BALA_TYPE_SYMBOL, BalaSymbol)(((BalaSymbol*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp62_), ((bala_symbol_get_type ())))))
) {
24250 BalaCCodeExpression* _tmp63_;
24251 BalaDataType* _tmp64_;
24252 BalaDataType* _tmp65_;
24253 BalaCCodeExpression* _tmp66_;
24254 BalaCCodeExpression* _tmp67_;
24255 BalaTargetValue* _tmp68_;
24256 BalaTargetValue* _tmp69_;
24257 _tmp63_ = bala_get_cvalue (expr);
24258 _tmp64_ = bala_expression_get_target_type (expr);
24259 _tmp65_ = _tmp64_;
24260 _tmp66_ = bala_ccode_base_module_convert_to_generic_pointer (self, _tmp63_, _tmp65_);
24261 _tmp67_ = _tmp66_;
24262 bala_set_cvalue (expr, _tmp67_);
24263 _bala_ccode_node_unref0 (_tmp67_)((_tmp67_ == ((void*)0)) ? ((void*)0) : (_tmp67_ = (bala_ccode_node_unref
(_tmp67_), ((void*)0))))
;
24264 _tmp68_ = bala_expression_get_target_value (expr);
24265 _tmp69_ = _tmp68_;
24266 G_TYPE_CHECK_INSTANCE_CAST (_tmp69_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp69_), ((bala_glib_value_get_type ())))))
->lvalue = FALSE(0);
24267 }
24268 }
24269 _tmp71_ = bala_expression_get_value_type (expr);
24270 _tmp72_ = _tmp71_;
24271 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp72_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp72_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
24272 BalaDataType* _tmp73_;
24273 BalaDataType* _tmp74_;
24274 gboolean _tmp75_;
24275 gboolean _tmp76_;
24276 _tmp73_ = bala_expression_get_value_type (expr);
24277 _tmp74_ = _tmp73_;
24278 _tmp75_ = bala_data_type_get_nullable (_tmp74_);
24279 _tmp76_ = _tmp75_;
24280 _tmp70_ = !_tmp76_;
24281 } else {
24282 _tmp70_ = FALSE(0);
24283 }
24284 if (!_tmp70_) {
24285 BalaTargetValue* _tmp77_;
24286 BalaTargetValue* _tmp78_;
24287 _tmp77_ = bala_expression_get_target_value (expr);
24288 _tmp78_ = _tmp77_;
24289 G_TYPE_CHECK_INSTANCE_CAST (_tmp78_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp78_), ((bala_glib_value_get_type ())))))
->non_null = bala_expression_is_non_null (expr);
24290 }
24291 } else {
24292 gboolean _tmp79_ = FALSE(0);
24293 BalaDataType* _tmp80_;
24294 BalaDataType* _tmp81_;
24295 _tmp80_ = bala_expression_get_value_type (expr);
24296 _tmp81_ = _tmp80_;
24297 if (_tmp81_ != NULL((void*)0)) {
24298 _tmp79_ = bala_ccode_base_module_is_compact_class_destructor_call (expr);
24299 } else {
24300 _tmp79_ = FALSE(0);
24301 }
24302 if (_tmp79_) {
24303 BalaTargetValue* temp_value = NULL((void*)0);
24304 BalaTargetValue* _tmp82_;
24305 BalaTargetValue* _tmp83_;
24306 BalaTargetValue* _tmp84_;
24307 BalaCCodeFunction* _tmp85_;
24308 BalaCCodeFunction* _tmp86_;
24309 BalaCCodeExpression* _tmp87_;
24310 BalaCCodeConstant* _tmp88_;
24311 BalaCCodeConstant* _tmp89_;
24312 BalaTargetValue* _tmp90_;
24313 _tmp82_ = bala_expression_get_target_value (expr);
24314 _tmp83_ = _tmp82_;
24315 _tmp84_ = bala_ccode_base_module_store_temp_value (self, _tmp83_, (BalaCodeNode*) expr, NULL((void*)0));
24316 temp_value = _tmp84_;
24317 _tmp85_ = bala_ccode_base_module_get_ccode (self);
24318 _tmp86_ = _tmp85_;
24319 _tmp87_ = bala_get_cvalue (expr);
24320 _tmp88_ = bala_ccode_constant_new ("NULL");
24321 _tmp89_ = _tmp88_;
24322 bala_ccode_function_add_assignment (_tmp86_, _tmp87_, (BalaCCodeExpression*) _tmp89_);
24323 _bala_ccode_node_unref0 (_tmp89_)((_tmp89_ == ((void*)0)) ? ((void*)0) : (_tmp89_ = (bala_ccode_node_unref
(_tmp89_), ((void*)0))))
;
24324 _tmp90_ = temp_value;
24325 bala_expression_set_target_value (expr, _tmp90_);
24326 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
24327 }
24328 }
24329}
24330
24331static void
24332bala_ccode_base_module_real_visit_boolean_literal (BalaCodeVisitor* base,
24333 BalaBooleanLiteral* expr)
24334{
24335 BalaCCodeBaseModule * self;
24336 gboolean _tmp0_;
24337 gboolean _tmp1_;
24338 BalaCCodeExpression* _tmp2_;
24339 BalaCCodeExpression* _tmp3_;
24340 self = (BalaCCodeBaseModule*) base;
24341 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24342 _tmp0_ = bala_boolean_literal_get_value (expr);
24343 _tmp1_ = _tmp0_;
24344 _tmp2_ = bala_ccode_base_module_get_boolean_cconstant (self, _tmp1_);
24345 _tmp3_ = _tmp2_;
24346 bala_set_cvalue ((BalaExpression*) expr, _tmp3_);
24347 _bala_ccode_node_unref0 (_tmp3_)((_tmp3_ == ((void*)0)) ? ((void*)0) : (_tmp3_ = (bala_ccode_node_unref
(_tmp3_), ((void*)0))))
;
24348}
24349
24350static void
24351bala_ccode_base_module_real_visit_character_literal (BalaCodeVisitor* base,
24352 BalaCharacterLiteral* expr)
24353{
24354 BalaCCodeBaseModule * self;
24355 gboolean _tmp0_ = FALSE(0);
24356 self = (BalaCCodeBaseModule*) base;
24357 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24358 if (bala_character_literal_get_char (expr) >= ((gunichar) 0x20)) {
24359 _tmp0_ = bala_character_literal_get_char (expr) < ((gunichar) 0x80);
24360 } else {
24361 _tmp0_ = FALSE(0);
24362 }
24363 if (_tmp0_) {
24364 const gchar* _tmp1_;
24365 const gchar* _tmp2_;
24366 BalaCCodeConstant* _tmp3_;
24367 BalaCCodeConstant* _tmp4_;
24368 _tmp1_ = bala_character_literal_get_value (expr);
24369 _tmp2_ = _tmp1_;
24370 _tmp3_ = bala_ccode_constant_new (_tmp2_);
24371 _tmp4_ = _tmp3_;
24372 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp4_);
24373 _bala_ccode_node_unref0 (_tmp4_)((_tmp4_ == ((void*)0)) ? ((void*)0) : (_tmp4_ = (bala_ccode_node_unref
(_tmp4_), ((void*)0))))
;
24374 } else {
24375 gchar* _tmp5_;
24376 gchar* _tmp6_;
24377 BalaCCodeConstant* _tmp7_;
24378 BalaCCodeConstant* _tmp8_;
24379 _tmp5_ = g_strdup_printf ("%uU", (guint) bala_character_literal_get_char (expr));
24380 _tmp6_ = _tmp5_;
24381 _tmp7_ = bala_ccode_constant_new (_tmp6_);
24382 _tmp8_ = _tmp7_;
24383 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp8_);
24384 _bala_ccode_node_unref0 (_tmp8_)((_tmp8_ == ((void*)0)) ? ((void*)0) : (_tmp8_ = (bala_ccode_node_unref
(_tmp8_), ((void*)0))))
;
24385 _g_free0 (_tmp6_)(_tmp6_ = (g_free (_tmp6_), ((void*)0)));
24386 }
24387}
24388
24389static void
24390bala_ccode_base_module_real_visit_integer_literal (BalaCodeVisitor* base,
24391 BalaIntegerLiteral* expr)
24392{
24393 BalaCCodeBaseModule * self;
24394 const gchar* _tmp0_;
24395 const gchar* _tmp1_;
24396 const gchar* _tmp2_;
24397 const gchar* _tmp3_;
24398 gchar* _tmp4_;
24399 gchar* _tmp5_;
24400 BalaCCodeConstant* _tmp6_;
24401 BalaCCodeConstant* _tmp7_;
24402 self = (BalaCCodeBaseModule*) base;
24403 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24404 _tmp0_ = bala_integer_literal_get_value (expr);
24405 _tmp1_ = _tmp0_;
24406 _tmp2_ = bala_integer_literal_get_type_suffix (expr);
24407 _tmp3_ = _tmp2_;
24408 _tmp4_ = g_strconcat (_tmp1_, _tmp3_, NULL((void*)0));
24409 _tmp5_ = _tmp4_;
24410 _tmp6_ = bala_ccode_constant_new (_tmp5_);
24411 _tmp7_ = _tmp6_;
24412 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp7_);
24413 _bala_ccode_node_unref0 (_tmp7_)((_tmp7_ == ((void*)0)) ? ((void*)0) : (_tmp7_ = (bala_ccode_node_unref
(_tmp7_), ((void*)0))))
;
24414 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
24415}
24416
24417static glong
24418string_strnlen (gchar* str,
24419 glong maxlen)
24420{
24421 gchar* end = NULL((void*)0);
24422 gchar* _tmp0_;
24423 gchar* _tmp1_;
24424 glong result = 0L;
24425 _tmp0_ = memchr (str, 0, (gsize) maxlen);
24426 end = _tmp0_;
24427 _tmp1_ = end;
24428 if (_tmp1_ == NULL((void*)0)) {
24429 result = maxlen;
24430 return result;
24431 } else {
24432 gchar* _tmp2_;
24433 _tmp2_ = end;
24434 result = (glong) (_tmp2_ - str);
24435 return result;
24436 }
24437}
24438
24439static gchar*
24440string_substring (const gchar* self,
24441 glong offset,
24442 glong len)
24443{
24444 glong string_length = 0L;
24445 gboolean _tmp0_ = FALSE(0);
24446 gchar* _tmp3_;
24447 gchar* result = NULL((void*)0);
24448 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
24449 if (offset >= ((glong) 0)) {
24450 _tmp0_ = len >= ((glong) 0);
24451 } else {
24452 _tmp0_ = FALSE(0);
24453 }
24454 if (_tmp0_) {
24455 string_length = string_strnlen ((gchar*) self, offset + len);
24456 } else {
24457 gint _tmp1_;
24458 gint _tmp2_;
24459 _tmp1_ = strlen (self);
24460 _tmp2_ = _tmp1_;
24461 string_length = (glong) _tmp2_;
24462 }
24463 if (offset < ((glong) 0)) {
24464 offset = string_length + offset;
24465 g_return_val_if_fail (offset >= ((glong) 0), NULL)do { if ((offset >= ((glong) 0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "offset >= ((glong) 0)"
); return (((void*)0)); } } while (0)
;
24466 } else {
24467 g_return_val_if_fail (offset <= string_length, NULL)do { if ((offset <= string_length)) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "offset <= string_length"
); return (((void*)0)); } } while (0)
;
24468 }
24469 if (len < ((glong) 0)) {
24470 len = string_length - offset;
24471 }
24472 g_return_val_if_fail ((offset + len) <= string_length, NULL)do { if (((offset + len) <= string_length)) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "(offset + len) <= string_length"
); return (((void*)0)); } } while (0)
;
24473 _tmp3_ = g_strndup (((gchar*) self) + offset, (gsize) len);
24474 result = _tmp3_;
24475 return result;
24476}
24477
24478static gboolean
24479string_contains (const gchar* self,
24480 const gchar* needle)
24481{
24482 gchar* _tmp0_;
24483 gboolean result = FALSE(0);
24484 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
24485 g_return_val_if_fail (needle != NULL, FALSE)do { if ((needle != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "needle != NULL"
); return ((0)); } } while (0)
;
24486 _tmp0_ = strstr ((gchar*) self, (gchar*) needle);
24487 result = _tmp0_ != NULL((void*)0);
24488 return result;
24489}
24490
24491static void
24492bala_ccode_base_module_real_visit_real_literal (BalaCodeVisitor* base,
24493 BalaRealLiteral* expr)
24494{
24495 BalaCCodeBaseModule * self;
24496 gchar* c_literal = NULL((void*)0);
24497 const gchar* _tmp0_;
24498 const gchar* _tmp1_;
24499 gchar* _tmp2_;
24500 gboolean _tmp3_ = FALSE(0);
24501 const gchar* _tmp4_;
24502 gboolean _tmp11_ = FALSE(0);
24503 gboolean _tmp12_ = FALSE(0);
24504 const gchar* _tmp13_;
24505 const gchar* _tmp28_;
24506 BalaCCodeConstant* _tmp29_;
24507 BalaCCodeConstant* _tmp30_;
24508 self = (BalaCCodeBaseModule*) base;
24509 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24510 _tmp0_ = bala_real_literal_get_value (expr);
24511 _tmp1_ = _tmp0_;
24512 _tmp2_ = g_strdup (_tmp1_);
24513 c_literal = _tmp2_;
24514 _tmp4_ = c_literal;
24515 if (g_str_has_suffix (_tmp4_, "d")) {
24516 _tmp3_ = TRUE(!(0));
24517 } else {
24518 const gchar* _tmp5_;
24519 _tmp5_ = c_literal;
24520 _tmp3_ = g_str_has_suffix (_tmp5_, "D");
24521 }
24522 if (_tmp3_) {
24523 const gchar* _tmp6_;
24524 const gchar* _tmp7_;
24525 gint _tmp8_;
24526 gint _tmp9_;
24527 gchar* _tmp10_;
24528 _tmp6_ = c_literal;
24529 _tmp7_ = c_literal;
24530 _tmp8_ = strlen (_tmp7_);
24531 _tmp9_ = _tmp8_;
24532 _tmp10_ = string_substring (_tmp6_, (glong) 0, (glong) (_tmp9_ - 1));
24533 _g_free0 (c_literal)(c_literal = (g_free (c_literal), ((void*)0)));
24534 c_literal = _tmp10_;
24535 }
24536 _tmp13_ = c_literal;
24537 if (string_contains (_tmp13_, ".")) {
24538 _tmp12_ = TRUE(!(0));
24539 } else {
24540 const gchar* _tmp14_;
24541 _tmp14_ = c_literal;
24542 _tmp12_ = string_contains (_tmp14_, "e");
24543 }
24544 if (_tmp12_) {
24545 _tmp11_ = TRUE(!(0));
24546 } else {
24547 const gchar* _tmp15_;
24548 _tmp15_ = c_literal;
24549 _tmp11_ = string_contains (_tmp15_, "E");
24550 }
24551 if (!_tmp11_) {
24552 gboolean _tmp16_ = FALSE(0);
24553 const gchar* _tmp17_;
24554 _tmp17_ = c_literal;
24555 if (string_contains (_tmp17_, "f")) {
24556 _tmp16_ = TRUE(!(0));
24557 } else {
24558 const gchar* _tmp18_;
24559 _tmp18_ = c_literal;
24560 _tmp16_ = string_contains (_tmp18_, "F");
24561 }
24562 if (_tmp16_) {
24563 const gchar* _tmp19_;
24564 const gchar* _tmp20_;
24565 gint _tmp21_;
24566 gint _tmp22_;
24567 gchar* _tmp23_;
24568 gchar* _tmp24_;
24569 gchar* _tmp25_;
24570 _tmp19_ = c_literal;
24571 _tmp20_ = c_literal;
24572 _tmp21_ = strlen (_tmp20_);
24573 _tmp22_ = _tmp21_;
24574 _tmp23_ = string_substring (_tmp19_, (glong) 0, (glong) (_tmp22_ - 1));
24575 _tmp24_ = _tmp23_;
24576 _tmp25_ = g_strconcat (_tmp24_, ".f", NULL((void*)0));
24577 _g_free0 (c_literal)(c_literal = (g_free (c_literal), ((void*)0)));
24578 c_literal = _tmp25_;
24579 _g_free0 (_tmp24_)(_tmp24_ = (g_free (_tmp24_), ((void*)0)));
24580 } else {
24581 const gchar* _tmp26_;
24582 gchar* _tmp27_;
24583 _tmp26_ = c_literal;
24584 _tmp27_ = g_strconcat (_tmp26_, ".", NULL((void*)0));
24585 _g_free0 (c_literal)(c_literal = (g_free (c_literal), ((void*)0)));
24586 c_literal = _tmp27_;
24587 }
24588 }
24589 _tmp28_ = c_literal;
24590 _tmp29_ = bala_ccode_constant_new (_tmp28_);
24591 _tmp30_ = _tmp29_;
24592 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp30_);
24593 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
24594 _g_free0 (c_literal)(c_literal = (g_free (c_literal), ((void*)0)));
24595}
24596
24597static void
24598bala_ccode_base_module_real_visit_string_literal (BalaCodeVisitor* base,
24599 BalaStringLiteral* expr)
24600{
24601 BalaCCodeBaseModule * self;
24602 const gchar* _tmp0_;
24603 const gchar* _tmp1_;
24604 gchar* _tmp2_;
24605 gchar* _tmp3_;
24606 BalaCCodeConstant* _tmp4_;
24607 BalaCCodeConstant* _tmp5_;
24608 gboolean _tmp6_;
24609 gboolean _tmp7_;
24610 self = (BalaCCodeBaseModule*) base;
24611 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24612 _tmp0_ = bala_string_literal_get_value (expr);
24613 _tmp1_ = _tmp0_;
24614 _tmp2_ = string_replace (_tmp1_, "\n", "\\n");
24615 _tmp3_ = _tmp2_;
24616 _tmp4_ = bala_ccode_constant_new_string (_tmp3_);
24617 _tmp5_ = _tmp4_;
24618 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp5_);
24619 _bala_ccode_node_unref0 (_tmp5_)((_tmp5_ == ((void*)0)) ? ((void*)0) : (_tmp5_ = (bala_ccode_node_unref
(_tmp5_), ((void*)0))))
;
24620 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
24621 _tmp6_ = bala_string_literal_get_translate (expr);
24622 _tmp7_ = _tmp6_;
24623 if (_tmp7_) {
24624 BalaCCodeFunctionCall* translate = NULL((void*)0);
24625 BalaCCodeIdentifier* _tmp8_;
24626 BalaCCodeIdentifier* _tmp9_;
24627 BalaCCodeFunctionCall* _tmp10_;
24628 BalaCCodeFunctionCall* _tmp11_;
24629 BalaCCodeFunctionCall* _tmp12_;
24630 BalaCCodeExpression* _tmp13_;
24631 BalaCCodeFunctionCall* _tmp14_;
24632 _tmp8_ = bala_ccode_identifier_new ("_");
24633 _tmp9_ = _tmp8_;
24634 _tmp10_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp9_);
24635 _tmp11_ = _tmp10_;
24636 _bala_ccode_node_unref0 (_tmp9_)((_tmp9_ == ((void*)0)) ? ((void*)0) : (_tmp9_ = (bala_ccode_node_unref
(_tmp9_), ((void*)0))))
;
24637 translate = _tmp11_;
24638 _tmp12_ = translate;
24639 _tmp13_ = bala_get_cvalue ((BalaExpression*) expr);
24640 bala_ccode_function_call_add_argument (_tmp12_, _tmp13_);
24641 _tmp14_ = translate;
24642 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp14_);
24643 _bala_ccode_node_unref0 (translate)((translate == ((void*)0)) ? ((void*)0) : (translate = (bala_ccode_node_unref
(translate), ((void*)0))))
;
24644 }
24645}
24646
24647static void
24648bala_ccode_base_module_real_visit_regex_literal (BalaCodeVisitor* base,
24649 BalaRegexLiteral* expr)
24650{
24651 BalaCCodeBaseModule * self;
24652 gchar** parts = NULL((void*)0);
24653 const gchar* _tmp0_;
24654 const gchar* _tmp1_;
24655 gchar** _tmp2_;
24656 gchar** _tmp3_;
24657 gint parts_length1;
24658 gint _parts_size_;
24659 gchar* re = NULL((void*)0);
24660 gchar** _tmp4_;
24661 gint _tmp4__length1;
24662 const gchar* _tmp5_;
24663 gchar* _tmp6_;
24664 gchar* flags = NULL((void*)0);
24665 gchar* _tmp7_;
24666 gchar** _tmp8_;
24667 gint _tmp8__length1;
24668 const gchar* _tmp9_;
24669 gchar** _tmp12_;
24670 gint _tmp12__length1;
24671 const gchar* _tmp13_;
24672 gchar** _tmp16_;
24673 gint _tmp16__length1;
24674 const gchar* _tmp17_;
24675 gchar** _tmp20_;
24676 gint _tmp20__length1;
24677 const gchar* _tmp21_;
24678 BalaCCodeDeclaration* _cdecl_ = NULL((void*)0);
24679 BalaCCodeDeclaration* _tmp24_;
24680 gchar* cname = NULL((void*)0);
24681 gchar* _tmp25_;
24682 gint _tmp90_;
24683 BalaCCodeDeclaration* _tmp91_;
24684 const gchar* _tmp92_;
24685 gchar* _tmp93_;
24686 gchar* _tmp94_;
24687 BalaCCodeVariableDeclarator* _tmp95_;
24688 BalaCCodeVariableDeclarator* _tmp96_;
24689 BalaCCodeDeclaration* _tmp97_;
24690 BalaCCodeConstant* regex_const = NULL((void*)0);
24691 const gchar* _tmp98_;
24692 const gchar* _tmp99_;
24693 const gchar* _tmp100_;
24694 gchar* _tmp101_;
24695 gchar* _tmp102_;
24696 BalaCCodeConstant* _tmp103_;
24697 BalaCCodeConstant* _tmp104_;
24698 BalaCCodeFile* _tmp105_;
24699 BalaCCodeDeclaration* _tmp106_;
24700 self = (BalaCCodeBaseModule*) base;
24701 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24702 _tmp0_ = bala_regex_literal_get_value (expr);
24703 _tmp1_ = _tmp0_;
24704 _tmp3_ = _tmp2_ = g_strsplit (_tmp1_, "/", 3);
24705 parts = _tmp3_;
24706 parts_length1 = _bala_array_length (_tmp2_);
24707 _parts_size_ = parts_length1;
24708 _tmp4_ = parts;
24709 _tmp4__length1 = parts_length1;
24710 _tmp5_ = _tmp4_[2];
24711 _tmp6_ = g_strescape (_tmp5_, "");
24712 re = _tmp6_;
24713 _tmp7_ = g_strdup ("0");
24714 flags = _tmp7_;
24715 _tmp8_ = parts;
24716 _tmp8__length1 = parts_length1;
24717 _tmp9_ = _tmp8_[1];
24718 if (string_contains (_tmp9_, "i")) {
24719 const gchar* _tmp10_;
24720 gchar* _tmp11_;
24721 _tmp10_ = flags;
24722 _tmp11_ = g_strconcat (_tmp10_, " | G_REGEX_CASELESS", NULL((void*)0));
24723 _g_free0 (flags)(flags = (g_free (flags), ((void*)0)));
24724 flags = _tmp11_;
24725 }
24726 _tmp12_ = parts;
24727 _tmp12__length1 = parts_length1;
24728 _tmp13_ = _tmp12_[1];
24729 if (string_contains (_tmp13_, "m")) {
24730 const gchar* _tmp14_;
24731 gchar* _tmp15_;
24732 _tmp14_ = flags;
24733 _tmp15_ = g_strconcat (_tmp14_, " | G_REGEX_MULTILINE", NULL((void*)0));
24734 _g_free0 (flags)(flags = (g_free (flags), ((void*)0)));
24735 flags = _tmp15_;
24736 }
24737 _tmp16_ = parts;
24738 _tmp16__length1 = parts_length1;
24739 _tmp17_ = _tmp16_[1];
24740 if (string_contains (_tmp17_, "s")) {
24741 const gchar* _tmp18_;
24742 gchar* _tmp19_;
24743 _tmp18_ = flags;
24744 _tmp19_ = g_strconcat (_tmp18_, " | G_REGEX_DOTALL", NULL((void*)0));
24745 _g_free0 (flags)(flags = (g_free (flags), ((void*)0)));
24746 flags = _tmp19_;
24747 }
24748 _tmp20_ = parts;
24749 _tmp20__length1 = parts_length1;
24750 _tmp21_ = _tmp20_[1];
24751 if (string_contains (_tmp21_, "x")) {
24752 const gchar* _tmp22_;
24753 gchar* _tmp23_;
24754 _tmp22_ = flags;
24755 _tmp23_ = g_strconcat (_tmp22_, " | G_REGEX_EXTENDED", NULL((void*)0));
24756 _g_free0 (flags)(flags = (g_free (flags), ((void*)0)));
24757 flags = _tmp23_;
24758 }
24759 _tmp24_ = bala_ccode_declaration_new ("GRegex*");
24760 _cdecl_ = _tmp24_;
24761 _tmp25_ = g_strdup_printf ("_tmp_regex_%d", self->next_regex_id);
24762 cname = _tmp25_;
24763 if (self->next_regex_id == 0) {
24764 BalaCCodeFunction* fun = NULL((void*)0);
24765 BalaCCodeFunction* _tmp26_;
24766 BalaCCodeFunction* _tmp27_;
24767 BalaCCodeFunction* _tmp28_;
24768 BalaCCodeParameter* _tmp29_;
24769 BalaCCodeParameter* _tmp30_;
24770 BalaCCodeFunction* _tmp31_;
24771 BalaCCodeParameter* _tmp32_;
24772 BalaCCodeParameter* _tmp33_;
24773 BalaCCodeFunction* _tmp34_;
24774 BalaCCodeParameter* _tmp35_;
24775 BalaCCodeParameter* _tmp36_;
24776 BalaCCodeFunction* _tmp37_;
24777 BalaCCodeFunctionCall* once_enter_call = NULL((void*)0);
24778 BalaCCodeIdentifier* _tmp38_;
24779 BalaCCodeIdentifier* _tmp39_;
24780 BalaCCodeFunctionCall* _tmp40_;
24781 BalaCCodeFunctionCall* _tmp41_;
24782 BalaCCodeFunctionCall* _tmp42_;
24783 BalaCCodeConstant* _tmp43_;
24784 BalaCCodeConstant* _tmp44_;
24785 BalaCCodeFunction* _tmp45_;
24786 BalaCCodeFunction* _tmp46_;
24787 BalaCCodeFunctionCall* _tmp47_;
24788 BalaCCodeFunctionCall* regex_new_call = NULL((void*)0);
24789 BalaCCodeIdentifier* _tmp48_;
24790 BalaCCodeIdentifier* _tmp49_;
24791 BalaCCodeFunctionCall* _tmp50_;
24792 BalaCCodeFunctionCall* _tmp51_;
24793 BalaCCodeFunctionCall* _tmp52_;
24794 BalaCCodeConstant* _tmp53_;
24795 BalaCCodeConstant* _tmp54_;
24796 BalaCCodeFunctionCall* _tmp55_;
24797 BalaCCodeConstant* _tmp56_;
24798 BalaCCodeConstant* _tmp57_;
24799 BalaCCodeFunctionCall* _tmp58_;
24800 BalaCCodeConstant* _tmp59_;
24801 BalaCCodeConstant* _tmp60_;
24802 BalaCCodeFunctionCall* _tmp61_;
24803 BalaCCodeConstant* _tmp62_;
24804 BalaCCodeConstant* _tmp63_;
24805 BalaCCodeFunction* _tmp64_;
24806 BalaCCodeFunction* _tmp65_;
24807 BalaCCodeIdentifier* _tmp66_;
24808 BalaCCodeIdentifier* _tmp67_;
24809 BalaCCodeFunctionCall* _tmp68_;
24810 BalaCCodeFunctionCall* once_leave_call = NULL((void*)0);
24811 BalaCCodeIdentifier* _tmp69_;
24812 BalaCCodeIdentifier* _tmp70_;
24813 BalaCCodeFunctionCall* _tmp71_;
24814 BalaCCodeFunctionCall* _tmp72_;
24815 BalaCCodeFunctionCall* _tmp73_;
24816 BalaCCodeConstant* _tmp74_;
24817 BalaCCodeConstant* _tmp75_;
24818 BalaCCodeFunctionCall* _tmp76_;
24819 BalaCCodeConstant* _tmp77_;
24820 BalaCCodeConstant* _tmp78_;
24821 BalaCCodeFunction* _tmp79_;
24822 BalaCCodeFunction* _tmp80_;
24823 BalaCCodeFunctionCall* _tmp81_;
24824 BalaCCodeFunction* _tmp82_;
24825 BalaCCodeFunction* _tmp83_;
24826 BalaCCodeFunction* _tmp84_;
24827 BalaCCodeFunction* _tmp85_;
24828 BalaCCodeIdentifier* _tmp86_;
24829 BalaCCodeIdentifier* _tmp87_;
24830 BalaCCodeFile* _tmp88_;
24831 BalaCCodeFunction* _tmp89_;
24832 _tmp26_ = bala_ccode_function_new ("_thread_safe_regex_init", "GRegex*");
24833 fun = _tmp26_;
24834 _tmp27_ = fun;
24835 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp27_, BALA_CCODE_MODIFIERS_STATIC | BALA_CCODE_MODIFIERS_INLINE);
24836 _tmp28_ = fun;
24837 _tmp29_ = bala_ccode_parameter_new ("re", "GRegex**");
24838 _tmp30_ = _tmp29_;
24839 bala_ccode_function_add_parameter (_tmp28_, _tmp30_);
24840 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
24841 _tmp31_ = fun;
24842 _tmp32_ = bala_ccode_parameter_new ("pattern", "const gchar *");
24843 _tmp33_ = _tmp32_;
24844 bala_ccode_function_add_parameter (_tmp31_, _tmp33_);
24845 _bala_ccode_node_unref0 (_tmp33_)((_tmp33_ == ((void*)0)) ? ((void*)0) : (_tmp33_ = (bala_ccode_node_unref
(_tmp33_), ((void*)0))))
;
24846 _tmp34_ = fun;
24847 _tmp35_ = bala_ccode_parameter_new ("compile_flags", "GRegexCompileFlags");
24848 _tmp36_ = _tmp35_;
24849 bala_ccode_function_add_parameter (_tmp34_, _tmp36_);
24850 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
24851 _tmp37_ = fun;
24852 bala_ccode_base_module_push_function (self, _tmp37_);
24853 _tmp38_ = bala_ccode_identifier_new ("g_once_init_enter");
24854 _tmp39_ = _tmp38_;
24855 _tmp40_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp39_);
24856 _tmp41_ = _tmp40_;
24857 _bala_ccode_node_unref0 (_tmp39_)((_tmp39_ == ((void*)0)) ? ((void*)0) : (_tmp39_ = (bala_ccode_node_unref
(_tmp39_), ((void*)0))))
;
24858 once_enter_call = _tmp41_;
24859 _tmp42_ = once_enter_call;
24860 _tmp43_ = bala_ccode_constant_new ("(volatile gsize*) re");
24861 _tmp44_ = _tmp43_;
24862 bala_ccode_function_call_add_argument (_tmp42_, (BalaCCodeExpression*) _tmp44_);
24863 _bala_ccode_node_unref0 (_tmp44_)((_tmp44_ == ((void*)0)) ? ((void*)0) : (_tmp44_ = (bala_ccode_node_unref
(_tmp44_), ((void*)0))))
;
24864 _tmp45_ = bala_ccode_base_module_get_ccode (self);
24865 _tmp46_ = _tmp45_;
24866 _tmp47_ = once_enter_call;
24867 bala_ccode_function_open_if (_tmp46_, (BalaCCodeExpression*) _tmp47_);
24868 _tmp48_ = bala_ccode_identifier_new ("g_regex_new");
24869 _tmp49_ = _tmp48_;
24870 _tmp50_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp49_);
24871 _tmp51_ = _tmp50_;
24872 _bala_ccode_node_unref0 (_tmp49_)((_tmp49_ == ((void*)0)) ? ((void*)0) : (_tmp49_ = (bala_ccode_node_unref
(_tmp49_), ((void*)0))))
;
24873 regex_new_call = _tmp51_;
24874 _tmp52_ = regex_new_call;
24875 _tmp53_ = bala_ccode_constant_new ("pattern");
24876 _tmp54_ = _tmp53_;
24877 bala_ccode_function_call_add_argument (_tmp52_, (BalaCCodeExpression*) _tmp54_);
24878 _bala_ccode_node_unref0 (_tmp54_)((_tmp54_ == ((void*)0)) ? ((void*)0) : (_tmp54_ = (bala_ccode_node_unref
(_tmp54_), ((void*)0))))
;
24879 _tmp55_ = regex_new_call;
24880 _tmp56_ = bala_ccode_constant_new ("compile_flags");
24881 _tmp57_ = _tmp56_;
24882 bala_ccode_function_call_add_argument (_tmp55_, (BalaCCodeExpression*) _tmp57_);
24883 _bala_ccode_node_unref0 (_tmp57_)((_tmp57_ == ((void*)0)) ? ((void*)0) : (_tmp57_ = (bala_ccode_node_unref
(_tmp57_), ((void*)0))))
;
24884 _tmp58_ = regex_new_call;
24885 _tmp59_ = bala_ccode_constant_new ("0");
24886 _tmp60_ = _tmp59_;
24887 bala_ccode_function_call_add_argument (_tmp58_, (BalaCCodeExpression*) _tmp60_);
24888 _bala_ccode_node_unref0 (_tmp60_)((_tmp60_ == ((void*)0)) ? ((void*)0) : (_tmp60_ = (bala_ccode_node_unref
(_tmp60_), ((void*)0))))
;
24889 _tmp61_ = regex_new_call;
24890 _tmp62_ = bala_ccode_constant_new ("NULL");
24891 _tmp63_ = _tmp62_;
24892 bala_ccode_function_call_add_argument (_tmp61_, (BalaCCodeExpression*) _tmp63_);
24893 _bala_ccode_node_unref0 (_tmp63_)((_tmp63_ == ((void*)0)) ? ((void*)0) : (_tmp63_ = (bala_ccode_node_unref
(_tmp63_), ((void*)0))))
;
24894 _tmp64_ = bala_ccode_base_module_get_ccode (self);
24895 _tmp65_ = _tmp64_;
24896 _tmp66_ = bala_ccode_identifier_new ("GRegex* val");
24897 _tmp67_ = _tmp66_;
24898 _tmp68_ = regex_new_call;
24899 bala_ccode_function_add_assignment (_tmp65_, (BalaCCodeExpression*) _tmp67_, (BalaCCodeExpression*) _tmp68_);
24900 _bala_ccode_node_unref0 (_tmp67_)((_tmp67_ == ((void*)0)) ? ((void*)0) : (_tmp67_ = (bala_ccode_node_unref
(_tmp67_), ((void*)0))))
;
24901 _tmp69_ = bala_ccode_identifier_new ("g_once_init_leave");
24902 _tmp70_ = _tmp69_;
24903 _tmp71_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp70_);
24904 _tmp72_ = _tmp71_;
24905 _bala_ccode_node_unref0 (_tmp70_)((_tmp70_ == ((void*)0)) ? ((void*)0) : (_tmp70_ = (bala_ccode_node_unref
(_tmp70_), ((void*)0))))
;
24906 once_leave_call = _tmp72_;
24907 _tmp73_ = once_leave_call;
24908 _tmp74_ = bala_ccode_constant_new ("(volatile gsize*) re");
24909 _tmp75_ = _tmp74_;
24910 bala_ccode_function_call_add_argument (_tmp73_, (BalaCCodeExpression*) _tmp75_);
24911 _bala_ccode_node_unref0 (_tmp75_)((_tmp75_ == ((void*)0)) ? ((void*)0) : (_tmp75_ = (bala_ccode_node_unref
(_tmp75_), ((void*)0))))
;
24912 _tmp76_ = once_leave_call;
24913 _tmp77_ = bala_ccode_constant_new ("(gsize) val");
24914 _tmp78_ = _tmp77_;
24915 bala_ccode_function_call_add_argument (_tmp76_, (BalaCCodeExpression*) _tmp78_);
24916 _bala_ccode_node_unref0 (_tmp78_)((_tmp78_ == ((void*)0)) ? ((void*)0) : (_tmp78_ = (bala_ccode_node_unref
(_tmp78_), ((void*)0))))
;
24917 _tmp79_ = bala_ccode_base_module_get_ccode (self);
24918 _tmp80_ = _tmp79_;
24919 _tmp81_ = once_leave_call;
24920 bala_ccode_function_add_expression (_tmp80_, (BalaCCodeExpression*) _tmp81_);
24921 _tmp82_ = bala_ccode_base_module_get_ccode (self);
24922 _tmp83_ = _tmp82_;
24923 bala_ccode_function_close (_tmp83_);
24924 _tmp84_ = bala_ccode_base_module_get_ccode (self);
24925 _tmp85_ = _tmp84_;
24926 _tmp86_ = bala_ccode_identifier_new ("*re");
24927 _tmp87_ = _tmp86_;
24928 bala_ccode_function_add_return (_tmp85_, (BalaCCodeExpression*) _tmp87_);
24929 _bala_ccode_node_unref0 (_tmp87_)((_tmp87_ == ((void*)0)) ? ((void*)0) : (_tmp87_ = (bala_ccode_node_unref
(_tmp87_), ((void*)0))))
;
24930 bala_ccode_base_module_pop_function (self);
24931 _tmp88_ = self->cfile;
24932 _tmp89_ = fun;
24933 bala_ccode_file_add_function (_tmp88_, _tmp89_);
24934 _bala_ccode_node_unref0 (once_leave_call)((once_leave_call == ((void*)0)) ? ((void*)0) : (once_leave_call
= (bala_ccode_node_unref (once_leave_call), ((void*)0))))
;
24935 _bala_ccode_node_unref0 (regex_new_call)((regex_new_call == ((void*)0)) ? ((void*)0) : (regex_new_call
= (bala_ccode_node_unref (regex_new_call), ((void*)0))))
;
24936 _bala_ccode_node_unref0 (once_enter_call)((once_enter_call == ((void*)0)) ? ((void*)0) : (once_enter_call
= (bala_ccode_node_unref (once_enter_call), ((void*)0))))
;
24937 _bala_ccode_node_unref0 (fun)((fun == ((void*)0)) ? ((void*)0) : (fun = (bala_ccode_node_unref
(fun), ((void*)0))))
;
24938 }
24939 _tmp90_ = self->next_regex_id;
24940 self->next_regex_id = _tmp90_ + 1;
24941 _tmp91_ = _cdecl_;
24942 _tmp92_ = cname;
24943 _tmp93_ = g_strconcat (_tmp92_, " = NULL", NULL((void*)0));
24944 _tmp94_ = _tmp93_;
24945 _tmp95_ = bala_ccode_variable_declarator_new (_tmp94_, NULL((void*)0), NULL((void*)0));
24946 _tmp96_ = _tmp95_;
24947 bala_ccode_declaration_add_declarator (_tmp91_, (BalaCCodeDeclarator*) _tmp96_);
24948 _bala_ccode_node_unref0 (_tmp96_)((_tmp96_ == ((void*)0)) ? ((void*)0) : (_tmp96_ = (bala_ccode_node_unref
(_tmp96_), ((void*)0))))
;
24949 _g_free0 (_tmp94_)(_tmp94_ = (g_free (_tmp94_), ((void*)0)));
24950 _tmp97_ = _cdecl_;
24951 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp97_, BALA_CCODE_MODIFIERS_STATIC);
24952 _tmp98_ = cname;
24953 _tmp99_ = re;
24954 _tmp100_ = flags;
24955 _tmp101_ = g_strdup_printf ("_thread_safe_regex_init (&%s, \"%s\", %s)", _tmp98_, _tmp99_, _tmp100_);
24956 _tmp102_ = _tmp101_;
24957 _tmp103_ = bala_ccode_constant_new (_tmp102_);
24958 _tmp104_ = _tmp103_;
24959 _g_free0 (_tmp102_)(_tmp102_ = (g_free (_tmp102_), ((void*)0)));
24960 regex_const = _tmp104_;
24961 _tmp105_ = self->cfile;
24962 _tmp106_ = _cdecl_;
24963 bala_ccode_file_add_constant_declaration (_tmp105_, (BalaCCodeNode*) _tmp106_);
24964 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) regex_const);
24965 _bala_ccode_node_unref0 (regex_const)((regex_const == ((void*)0)) ? ((void*)0) : (regex_const = (bala_ccode_node_unref
(regex_const), ((void*)0))))
;
24966 _g_free0 (cname)(cname = (g_free (cname), ((void*)0)));
24967 _bala_ccode_node_unref0 (_cdecl_)((_cdecl_ == ((void*)0)) ? ((void*)0) : (_cdecl_ = (bala_ccode_node_unref
(_cdecl_), ((void*)0))))
;
24968 _g_free0 (flags)(flags = (g_free (flags), ((void*)0)));
24969 _g_free0 (re)(re = (g_free (re), ((void*)0)));
24970 parts = (_bala_array_free (parts, parts_length1, (GDestroyNotify) g_free), NULL((void*)0));
24971}
24972
24973static void
24974bala_ccode_base_module_real_visit_null_literal (BalaCodeVisitor* base,
24975 BalaNullLiteral* expr)
24976{
24977 BalaCCodeBaseModule * self;
24978 BalaCodeContext* _tmp0_;
24979 BalaProfile _tmp1_;
24980 BalaProfile _tmp2_;
24981 BalaCCodeConstant* _tmp5_;
24982 BalaCCodeConstant* _tmp6_;
24983 BalaArrayType* array_type = NULL((void*)0);
24984 BalaDataType* _tmp7_;
24985 BalaDataType* _tmp8_;
24986 BalaArrayType* _tmp9_;
24987 BalaDelegateType* delegate_type = NULL((void*)0);
24988 BalaDataType* _tmp10_;
24989 BalaDataType* _tmp11_;
24990 BalaDelegateType* _tmp12_;
24991 BalaArrayType* _tmp13_;
24992 self = (BalaCCodeBaseModule*) base;
24993 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
24994 _tmp0_ = self->priv->_context;
24995 _tmp1_ = bala_code_context_get_profile (_tmp0_);
24996 _tmp2_ = _tmp1_;
24997 if (_tmp2_ == BALA_PROFILE_GOBJECT) {
24998 BalaCCodeFile* _tmp3_;
24999 _tmp3_ = self->cfile;
25000 bala_ccode_file_add_include (_tmp3_, "glib.h", FALSE(0));
25001 } else {
25002 BalaCCodeFile* _tmp4_;
25003 _tmp4_ = self->cfile;
25004 bala_ccode_file_add_include (_tmp4_, "stddef.h", FALSE(0));
25005 }
25006 _tmp5_ = bala_ccode_constant_new ("NULL");
25007 _tmp6_ = _tmp5_;
25008 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp6_);
25009 _bala_ccode_node_unref0 (_tmp6_)((_tmp6_ == ((void*)0)) ? ((void*)0) : (_tmp6_ = (bala_ccode_node_unref
(_tmp6_), ((void*)0))))
;
25010 _tmp7_ = bala_expression_get_target_type ((BalaExpression*) expr);
25011 _tmp8_ = _tmp7_;
25012 _tmp9_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp8_) : NULL((void*)0));
25013 array_type = _tmp9_;
25014 _tmp10_ = bala_expression_get_target_type ((BalaExpression*) expr);
25015 _tmp11_ = _tmp10_;
25016 _tmp12_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp11_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp11_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaDelegateType*) _tmp11_) : NULL((void*)0));
25017 delegate_type = _tmp12_;
25018 _tmp13_ = array_type;
25019 if (_tmp13_ != NULL((void*)0)) {
25020 {
25021 gint dim = 0;
25022 dim = 1;
25023 {
25024 gboolean _tmp14_ = FALSE(0);
25025 _tmp14_ = TRUE(!(0));
25026 while (TRUE(!(0))) {
25027 BalaArrayType* _tmp16_;
25028 gint _tmp17_;
25029 gint _tmp18_;
25030 BalaCCodeConstant* _tmp19_;
25031 BalaCCodeConstant* _tmp20_;
25032 if (!_tmp14_) {
25033 gint _tmp15_;
25034 _tmp15_ = dim;
25035 dim = _tmp15_ + 1;
25036 }
25037 _tmp14_ = FALSE(0);
25038 _tmp16_ = array_type;
25039 _tmp17_ = bala_array_type_get_rank (_tmp16_);
25040 _tmp18_ = _tmp17_;
25041 if (!(dim <= _tmp18_)) {
25042 break;
25043 }
25044 _tmp19_ = bala_ccode_constant_new ("0");
25045 _tmp20_ = _tmp19_;
25046 bala_append_array_length ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp20_);
25047 _bala_ccode_node_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_node_unref
(_tmp20_), ((void*)0))))
;
25048 }
25049 }
25050 }
25051 } else {
25052 gboolean _tmp21_ = FALSE(0);
25053 BalaDelegateType* _tmp22_;
25054 _tmp22_ = delegate_type;
25055 if (_tmp22_ != NULL((void*)0)) {
25056 BalaDelegateType* _tmp23_;
25057 BalaDelegate* _tmp24_;
25058 BalaDelegate* _tmp25_;
25059 gboolean _tmp26_;
25060 gboolean _tmp27_;
25061 _tmp23_ = delegate_type;
25062 _tmp24_ = bala_delegate_type_get_delegate_symbol (_tmp23_);
25063 _tmp25_ = _tmp24_;
25064 _tmp26_ = bala_delegate_get_has_target (_tmp25_);
25065 _tmp27_ = _tmp26_;
25066 _tmp21_ = _tmp27_;
25067 } else {
25068 _tmp21_ = FALSE(0);
25069 }
25070 if (_tmp21_) {
25071 BalaCCodeConstant* _tmp28_;
25072 BalaCCodeConstant* _tmp29_;
25073 BalaCCodeConstant* _tmp30_;
25074 BalaCCodeConstant* _tmp31_;
25075 _tmp28_ = bala_ccode_constant_new ("NULL");
25076 _tmp29_ = _tmp28_;
25077 bala_set_delegate_target ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp29_);
25078 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
25079 _tmp30_ = bala_ccode_constant_new ("NULL");
25080 _tmp31_ = _tmp30_;
25081 bala_set_delegate_target_destroy_notify ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp31_);
25082 _bala_ccode_node_unref0 (_tmp31_)((_tmp31_ == ((void*)0)) ? ((void*)0) : (_tmp31_ = (bala_ccode_node_unref
(_tmp31_), ((void*)0))))
;
25083 }
25084 }
25085 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
25086 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
25087}
25088
25089static BalaTargetValue*
25090bala_ccode_base_module_real_get_local_cvalue (BalaCCodeBaseModule* self,
25091 BalaLocalVariable* local)
25092{
25093 g_critical ("Type `%s' does not implement abstract method `bala_ccode_base_module_get_local_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)((((GTypeClass*) (((GTypeInstance*) (self))->g_class))->
g_type))
));
25094 return NULL((void*)0);
25095}
25096
25097BalaTargetValue*
25098bala_ccode_base_module_get_local_cvalue (BalaCCodeBaseModule* self,
25099 BalaLocalVariable* local)
25100{
25101 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25102 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_local_cvalue (self, local);
25103}
25104
25105static BalaTargetValue*
25106bala_ccode_base_module_real_get_parameter_cvalue (BalaCCodeBaseModule* self,
25107 BalaParameter* param)
25108{
25109 g_critical ("Type `%s' does not implement abstract method `bala_ccode_base_module_get_parameter_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)((((GTypeClass*) (((GTypeInstance*) (self))->g_class))->
g_type))
));
25110 return NULL((void*)0);
25111}
25112
25113BalaTargetValue*
25114bala_ccode_base_module_get_parameter_cvalue (BalaCCodeBaseModule* self,
25115 BalaParameter* param)
25116{
25117 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25118 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_parameter_cvalue (self, param);
25119}
25120
25121static BalaTargetValue*
25122bala_ccode_base_module_real_get_field_cvalue (BalaCCodeBaseModule* self,
25123 BalaField* field,
25124 BalaTargetValue* instance)
25125{
25126 g_critical ("Type `%s' does not implement abstract method `bala_ccode_base_module_get_field_cvalue'", g_type_name (G_TYPE_FROM_INSTANCE (self)((((GTypeClass*) (((GTypeInstance*) (self))->g_class))->
g_type))
));
25127 return NULL((void*)0);
25128}
25129
25130BalaTargetValue*
25131bala_ccode_base_module_get_field_cvalue (BalaCCodeBaseModule* self,
25132 BalaField* field,
25133 BalaTargetValue* instance)
25134{
25135 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25136 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_field_cvalue (self, field, instance);
25137}
25138
25139static BalaTargetValue*
25140bala_ccode_base_module_real_load_variable (BalaCCodeBaseModule* self,
25141 BalaVariable* variable,
25142 BalaTargetValue* value,
25143 BalaExpression* expr)
25144{
25145 g_critical ("Type `%s' does not implement abstract method `bala_ccode_base_module_load_variable'", g_type_name (G_TYPE_FROM_INSTANCE (self)((((GTypeClass*) (((GTypeInstance*) (self))->g_class))->
g_type))
));
25146 return NULL((void*)0);
25147}
25148
25149BalaTargetValue*
25150bala_ccode_base_module_load_variable (BalaCCodeBaseModule* self,
25151 BalaVariable* variable,
25152 BalaTargetValue* value,
25153 BalaExpression* expr)
25154{
25155 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25156 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->load_variable (self, variable, value, expr);
25157}
25158
25159static BalaTargetValue*
25160bala_ccode_base_module_real_load_this_parameter (BalaCCodeBaseModule* self,
25161 BalaTypeSymbol* sym)
25162{
25163 g_critical ("Type `%s' does not implement abstract method `bala_ccode_base_module_load_this_parameter'", g_type_name (G_TYPE_FROM_INSTANCE (self)((((GTypeClass*) (((GTypeInstance*) (self))->g_class))->
g_type))
));
25164 return NULL((void*)0);
25165}
25166
25167BalaTargetValue*
25168bala_ccode_base_module_load_this_parameter (BalaCCodeBaseModule* self,
25169 BalaTypeSymbol* sym)
25170{
25171 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25172 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->load_this_parameter (self, sym);
25173}
25174
25175static void
25176bala_ccode_base_module_real_store_value (BalaCCodeBaseModule* self,
25177 BalaTargetValue* lvalue,
25178 BalaTargetValue* value,
25179 BalaSourceReference* source_reference)
25180{
25181 g_critical ("Type `%s' does not implement abstract method `bala_ccode_base_module_store_value'", g_type_name (G_TYPE_FROM_INSTANCE (self)((((GTypeClass*) (((GTypeInstance*) (self))->g_class))->
g_type))
));
25182 return;
25183}
25184
25185void
25186bala_ccode_base_module_store_value (BalaCCodeBaseModule* self,
25187 BalaTargetValue* lvalue,
25188 BalaTargetValue* value,
25189 BalaSourceReference* source_reference)
25190{
25191 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
25192 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->store_value (self, lvalue, value, source_reference);
25193}
25194
25195static gchar*
25196bala_ccode_base_module_real_get_delegate_target_cname (BalaCCodeBaseModule* self,
25197 const gchar* delegate_cname)
25198{
25199 g_return_val_if_fail (delegate_cname != NULL, NULL)do { if ((delegate_cname != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "delegate_cname != NULL"
); return (((void*)0)); } } while (0)
;
25200 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 25200, ((const char*) (__func__)), ((void*)0)); } while (0)
;
25201}
25202
25203gchar*
25204bala_ccode_base_module_get_delegate_target_cname (BalaCCodeBaseModule* self,
25205 const gchar* delegate_cname)
25206{
25207 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25208 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_delegate_target_cname (self, delegate_cname);
25209}
25210
25211static BalaCCodeExpression*
25212bala_ccode_base_module_real_get_delegate_target_cexpression (BalaCCodeBaseModule* self,
25213 BalaExpression* delegate_expr,
25214 BalaCCodeExpression* * delegate_target_destroy_notify)
25215{
25216 BalaCCodeExpression* _bala_delegate_target_destroy_notify = NULL((void*)0);
25217 g_return_val_if_fail (delegate_expr != NULL, NULL)do { if ((delegate_expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "delegate_expr != NULL"
); return (((void*)0)); } } while (0)
;
25218 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 25218, ((const char*) (__func__)), ((void*)0)); } while (0)
;
25219 if (delegate_target_destroy_notify) {
25220 *delegate_target_destroy_notify = _bala_delegate_target_destroy_notify;
25221 } else {
25222 _bala_ccode_node_unref0 (_bala_delegate_target_destroy_notify)((_bala_delegate_target_destroy_notify == ((void*)0)) ? ((void
*)0) : (_bala_delegate_target_destroy_notify = (bala_ccode_node_unref
(_bala_delegate_target_destroy_notify), ((void*)0))))
;
25223 }
25224}
25225
25226BalaCCodeExpression*
25227bala_ccode_base_module_get_delegate_target_cexpression (BalaCCodeBaseModule* self,
25228 BalaExpression* delegate_expr,
25229 BalaCCodeExpression* * delegate_target_destroy_notify)
25230{
25231 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25232 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_delegate_target_cexpression (self, delegate_expr, delegate_target_destroy_notify);
25233}
25234
25235static BalaCCodeExpression*
25236bala_ccode_base_module_real_get_delegate_target_cvalue (BalaCCodeBaseModule* self,
25237 BalaTargetValue* value)
25238{
25239 BalaCCodeInvalidExpression* _tmp0_;
25240 BalaCCodeExpression* result = NULL((void*)0);
25241 g_return_val_if_fail (value != NULL, NULL)do { if ((value != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value != NULL"
); return (((void*)0)); } } while (0)
;
25242 _tmp0_ = bala_ccode_invalid_expression_new ();
25243 result = (BalaCCodeExpression*) _tmp0_;
25244 return result;
25245}
25246
25247BalaCCodeExpression*
25248bala_ccode_base_module_get_delegate_target_cvalue (BalaCCodeBaseModule* self,
25249 BalaTargetValue* value)
25250{
25251 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25252 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_delegate_target_cvalue (self, value);
25253}
25254
25255static BalaCCodeExpression*
25256bala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue (BalaCCodeBaseModule* self,
25257 BalaTargetValue* value)
25258{
25259 BalaCCodeInvalidExpression* _tmp0_;
25260 BalaCCodeExpression* result = NULL((void*)0);
25261 g_return_val_if_fail (value != NULL, NULL)do { if ((value != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value != NULL"
); return (((void*)0)); } } while (0)
;
25262 _tmp0_ = bala_ccode_invalid_expression_new ();
25263 result = (BalaCCodeExpression*) _tmp0_;
25264 return result;
25265}
25266
25267BalaCCodeExpression*
25268bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (BalaCCodeBaseModule* self,
25269 BalaTargetValue* value)
25270{
25271 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25272 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_delegate_target_destroy_notify_cvalue (self, value);
25273}
25274
25275static gchar*
25276bala_ccode_base_module_real_get_delegate_target_destroy_notify_cname (BalaCCodeBaseModule* self,
25277 const gchar* delegate_cname)
25278{
25279 g_return_val_if_fail (delegate_cname != NULL, NULL)do { if ((delegate_cname != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "delegate_cname != NULL"
); return (((void*)0)); } } while (0)
;
25280 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 25280, ((const char*) (__func__)), ((void*)0)); } while (0)
;
25281}
25282
25283gchar*
25284bala_ccode_base_module_get_delegate_target_destroy_notify_cname (BalaCCodeBaseModule* self,
25285 const gchar* delegate_cname)
25286{
25287 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25288 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_delegate_target_destroy_notify_cname (self, delegate_cname);
25289}
25290
25291static void
25292bala_ccode_base_module_real_visit_base_access (BalaCodeVisitor* base,
25293 BalaBaseAccess* expr)
25294{
25295 BalaCCodeBaseModule * self;
25296 BalaClass* cl = NULL((void*)0);
25297 BalaDataType* _tmp0_;
25298 BalaDataType* _tmp1_;
25299 BalaTypeSymbol* _tmp2_;
25300 BalaTypeSymbol* _tmp3_;
25301 gboolean _tmp4_ = FALSE(0);
25302 BalaClass* _tmp5_;
25303 self = (BalaCCodeBaseModule*) base;
25304 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
25305 _tmp0_ = bala_expression_get_value_type ((BalaExpression*) expr);
25306 _tmp1_ = _tmp0_;
25307 _tmp2_ = bala_data_type_get_type_symbol (_tmp1_);
25308 _tmp3_ = _tmp2_;
25309 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp3_) : NULL((void*)0);
25310 _tmp5_ = cl;
25311 if (_tmp5_ != NULL((void*)0)) {
25312 BalaClass* _tmp6_;
25313 gboolean _tmp7_;
25314 gboolean _tmp8_;
25315 _tmp6_ = cl;
25316 _tmp7_ = bala_class_get_is_compact (_tmp6_);
25317 _tmp8_ = _tmp7_;
25318 _tmp4_ = !_tmp8_;
25319 } else {
25320 _tmp4_ = FALSE(0);
25321 }
25322 if (_tmp4_) {
25323 BalaCCodeExpression* _tmp9_;
25324 BalaCCodeExpression* _tmp10_;
25325 BalaClass* _tmp11_;
25326 BalaCCodeFunctionCall* _tmp12_;
25327 BalaCCodeFunctionCall* _tmp13_;
25328 _tmp9_ = bala_ccode_base_module_get_this_cexpression (self);
25329 _tmp10_ = _tmp9_;
25330 _tmp11_ = cl;
25331 _tmp12_ = bala_ccode_base_module_generate_instance_cast (self, _tmp10_, (BalaTypeSymbol*) _tmp11_);
25332 _tmp13_ = _tmp12_;
25333 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp13_);
25334 _bala_ccode_node_unref0 (_tmp13_)((_tmp13_ == ((void*)0)) ? ((void*)0) : (_tmp13_ = (bala_ccode_node_unref
(_tmp13_), ((void*)0))))
;
25335 _bala_ccode_node_unref0 (_tmp10_)((_tmp10_ == ((void*)0)) ? ((void*)0) : (_tmp10_ = (bala_ccode_node_unref
(_tmp10_), ((void*)0))))
;
25336 } else {
25337 BalaDataType* _tmp14_;
25338 BalaDataType* _tmp15_;
25339 BalaTypeSymbol* _tmp16_;
25340 BalaTypeSymbol* _tmp17_;
25341 BalaTargetValue* _tmp18_;
25342 BalaTargetValue* _tmp19_;
25343 _tmp14_ = bala_expression_get_value_type ((BalaExpression*) expr);
25344 _tmp15_ = _tmp14_;
25345 _tmp16_ = bala_data_type_get_type_symbol (_tmp15_);
25346 _tmp17_ = _tmp16_;
25347 _tmp18_ = bala_ccode_base_module_load_this_parameter (self, _tmp17_);
25348 _tmp19_ = _tmp18_;
25349 bala_expression_set_target_value ((BalaExpression*) expr, _tmp19_);
25350 _bala_target_value_unref0 (_tmp19_)((_tmp19_ == ((void*)0)) ? ((void*)0) : (_tmp19_ = (bala_target_value_unref
(_tmp19_), ((void*)0))))
;
25351 }
25352}
25353
25354static void
25355bala_ccode_base_module_real_visit_postfix_expression (BalaCodeVisitor* base,
25356 BalaPostfixExpression* expr)
25357{
25358 BalaCCodeBaseModule * self;
25359 BalaMemberAccess* ma = NULL((void*)0);
25360 BalaExpression* _tmp0_;
25361 BalaExpression* _tmp1_;
25362 BalaMemberAccess* _tmp2_;
25363 BalaMemberAccess* _tmp3_;
25364 BalaTargetValue* temp_value = NULL((void*)0);
25365 BalaExpression* _tmp32_;
25366 BalaExpression* _tmp33_;
25367 BalaTargetValue* _tmp34_;
25368 BalaTargetValue* _tmp35_;
25369 BalaTargetValue* _tmp36_;
25370 BalaCCodeBinaryOperator _tmp37_ = 0;
25371 gboolean _tmp38_;
25372 gboolean _tmp39_;
25373 BalaCCodeBinaryOperator op = 0;
25374 BalaCCodeBinaryExpression* cexpr = NULL((void*)0);
25375 BalaCCodeBinaryOperator _tmp40_;
25376 BalaTargetValue* _tmp41_;
25377 BalaCCodeExpression* _tmp42_;
25378 BalaCCodeConstant* _tmp43_;
25379 BalaCCodeConstant* _tmp44_;
25380 BalaCCodeBinaryExpression* _tmp45_;
25381 BalaCCodeBinaryExpression* _tmp46_;
25382 BalaCCodeFunction* _tmp47_;
25383 BalaCCodeFunction* _tmp48_;
25384 BalaExpression* _tmp49_;
25385 BalaExpression* _tmp50_;
25386 BalaCCodeExpression* _tmp51_;
25387 BalaCCodeBinaryExpression* _tmp52_;
25388 BalaTargetValue* _tmp53_;
25389 self = (BalaCCodeBaseModule*) base;
25390 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
25391 _tmp0_ = bala_postfix_expression_get_inner (expr);
25392 _tmp1_ = _tmp0_;
25393 _tmp2_ = bala_ccode_base_module_find_property_access (self, _tmp1_);
25394 ma = _tmp2_;
25395 _tmp3_ = ma;
25396 if (_tmp3_ != NULL((void*)0)) {
25397 BalaProperty* prop = NULL((void*)0);
25398 BalaMemberAccess* _tmp4_;
25399 BalaSymbol* _tmp5_;
25400 BalaSymbol* _tmp6_;
25401 BalaProperty* _tmp7_;
25402 BalaCCodeBinaryOperator _tmp8_ = 0;
25403 gboolean _tmp9_;
25404 gboolean _tmp10_;
25405 BalaCCodeBinaryOperator op = 0;
25406 BalaCCodeBinaryExpression* cexpr = NULL((void*)0);
25407 BalaCCodeBinaryOperator _tmp11_;
25408 BalaExpression* _tmp12_;
25409 BalaExpression* _tmp13_;
25410 BalaCCodeExpression* _tmp14_;
25411 BalaCCodeConstant* _tmp15_;
25412 BalaCCodeConstant* _tmp16_;
25413 BalaCCodeBinaryExpression* _tmp17_;
25414 BalaCCodeBinaryExpression* _tmp18_;
25415 BalaProperty* _tmp19_;
25416 BalaMemberAccess* _tmp20_;
25417 BalaExpression* _tmp21_;
25418 BalaExpression* _tmp22_;
25419 BalaDataType* _tmp23_;
25420 BalaDataType* _tmp24_;
25421 BalaCCodeBinaryExpression* _tmp25_;
25422 BalaGLibValue* _tmp26_;
25423 BalaGLibValue* _tmp27_;
25424 BalaExpression* _tmp28_;
25425 BalaExpression* _tmp29_;
25426 BalaTargetValue* _tmp30_;
25427 BalaTargetValue* _tmp31_;
25428 _tmp4_ = ma;
25429 _tmp5_ = bala_expression_get_symbol_reference ((BalaExpression*) _tmp4_);
25430 _tmp6_ = _tmp5_;
25431 _tmp7_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, BALA_TYPE_PROPERTY, BalaProperty)(((BalaProperty*) g_type_check_instance_cast ((GTypeInstance*
) (_tmp6_), ((bala_property_get_type ())))))
);
25432 prop = _tmp7_;
25433 _tmp9_ = bala_postfix_expression_get_increment (expr);
25434 _tmp10_ = _tmp9_;
25435 if (_tmp10_) {
25436 _tmp8_ = BALA_CCODE_BINARY_OPERATOR_PLUS;
25437 } else {
25438 _tmp8_ = BALA_CCODE_BINARY_OPERATOR_MINUS;
25439 }
25440 op = _tmp8_;
25441 _tmp11_ = op;
25442 _tmp12_ = bala_postfix_expression_get_inner (expr);
25443 _tmp13_ = _tmp12_;
25444 _tmp14_ = bala_get_cvalue (_tmp13_);
25445 _tmp15_ = bala_ccode_constant_new ("1");
25446 _tmp16_ = _tmp15_;
25447 _tmp17_ = bala_ccode_binary_expression_new (_tmp11_, _tmp14_, (BalaCCodeExpression*) _tmp16_);
25448 _tmp18_ = _tmp17_;
25449 _bala_ccode_node_unref0 (_tmp16_)((_tmp16_ == ((void*)0)) ? ((void*)0) : (_tmp16_ = (bala_ccode_node_unref
(_tmp16_), ((void*)0))))
;
25450 cexpr = _tmp18_;
25451 _tmp19_ = prop;
25452 _tmp20_ = ma;
25453 _tmp21_ = bala_member_access_get_inner (_tmp20_);
25454 _tmp22_ = _tmp21_;
25455 _tmp23_ = bala_expression_get_value_type ((BalaExpression*) expr);
25456 _tmp24_ = _tmp23_;
25457 _tmp25_ = cexpr;
25458 _tmp26_ = bala_glib_value_new (_tmp24_, (BalaCCodeExpression*) _tmp25_, FALSE(0));
25459 _tmp27_ = _tmp26_;
25460 bala_ccode_base_module_store_property (self, _tmp19_, _tmp22_, (BalaTargetValue*) _tmp27_);
25461 _bala_target_value_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_target_value_unref
(_tmp27_), ((void*)0))))
;
25462 _tmp28_ = bala_postfix_expression_get_inner (expr);
25463 _tmp29_ = _tmp28_;
25464 _tmp30_ = bala_expression_get_target_value (_tmp29_);
25465 _tmp31_ = _tmp30_;
25466 bala_expression_set_target_value ((BalaExpression*) expr, _tmp31_);
25467 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
25468 _bala_code_node_unref0 (prop)((prop == ((void*)0)) ? ((void*)0) : (prop = (bala_code_node_unref
(prop), ((void*)0))))
;
25469 _bala_code_node_unref0 (ma)((ma == ((void*)0)) ? ((void*)0) : (ma = (bala_code_node_unref
(ma), ((void*)0))))
;
25470 return;
25471 }
25472 _tmp32_ = bala_postfix_expression_get_inner (expr);
25473 _tmp33_ = _tmp32_;
25474 _tmp34_ = bala_expression_get_target_value (_tmp33_);
25475 _tmp35_ = _tmp34_;
25476 _tmp36_ = bala_ccode_base_module_store_temp_value (self, _tmp35_, (BalaCodeNode*) expr, NULL((void*)0));
25477 temp_value = _tmp36_;
25478 _tmp38_ = bala_postfix_expression_get_increment (expr);
25479 _tmp39_ = _tmp38_;
25480 if (_tmp39_) {
25481 _tmp37_ = BALA_CCODE_BINARY_OPERATOR_PLUS;
25482 } else {
25483 _tmp37_ = BALA_CCODE_BINARY_OPERATOR_MINUS;
25484 }
25485 op = _tmp37_;
25486 _tmp40_ = op;
25487 _tmp41_ = temp_value;
25488 _tmp42_ = bala_get_cvalue_ (_tmp41_);
25489 _tmp43_ = bala_ccode_constant_new ("1");
25490 _tmp44_ = _tmp43_;
25491 _tmp45_ = bala_ccode_binary_expression_new (_tmp40_, _tmp42_, (BalaCCodeExpression*) _tmp44_);
25492 _tmp46_ = _tmp45_;
25493 _bala_ccode_node_unref0 (_tmp44_)((_tmp44_ == ((void*)0)) ? ((void*)0) : (_tmp44_ = (bala_ccode_node_unref
(_tmp44_), ((void*)0))))
;
25494 cexpr = _tmp46_;
25495 _tmp47_ = bala_ccode_base_module_get_ccode (self);
25496 _tmp48_ = _tmp47_;
25497 _tmp49_ = bala_postfix_expression_get_inner (expr);
25498 _tmp50_ = _tmp49_;
25499 _tmp51_ = bala_get_cvalue (_tmp50_);
25500 _tmp52_ = cexpr;
25501 bala_ccode_function_add_assignment (_tmp48_, _tmp51_, (BalaCCodeExpression*) _tmp52_);
25502 _tmp53_ = temp_value;
25503 bala_expression_set_target_value ((BalaExpression*) expr, _tmp53_);
25504 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
25505 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
25506 _bala_code_node_unref0 (ma)((ma == ((void*)0)) ? ((void*)0) : (ma = (bala_code_node_unref
(ma), ((void*)0))))
;
25507}
25508
25509static BalaMemberAccess*
25510bala_ccode_base_module_find_property_access (BalaCCodeBaseModule* self,
25511 BalaExpression* expr)
25512{
25513 BalaMemberAccess* ma = NULL((void*)0);
25514 BalaMemberAccess* _tmp0_;
25515 BalaMemberAccess* _tmp1_;
25516 BalaSymbol* _tmp2_;
25517 BalaSymbol* _tmp3_;
25518 BalaMemberAccess* result = NULL((void*)0);
25519 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
25520 g_return_val_if_fail (expr != NULL, NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return (((void*)0)); } } while (0)
;
25521 if (!G_TYPE_CHECK_INSTANCE_TYPE (expr, BALA_TYPE_MEMBER_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
expr); GType __t = ((bala_member_access_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
25522 result = NULL((void*)0);
25523 return result;
25524 }
25525 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (expr, BALA_TYPE_MEMBER_ACCESS, BalaMemberAccess)(((BalaMemberAccess*) g_type_check_instance_cast ((GTypeInstance
*) (expr), ((bala_member_access_get_type ())))))
);
25526 ma = _tmp0_;
25527 _tmp1_ = ma;
25528 _tmp2_ = bala_expression_get_symbol_reference ((BalaExpression*) _tmp1_);
25529 _tmp3_ = _tmp2_;
25530 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_PROPERTY)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_property_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
25531 result = ma;
25532 return result;
25533 }
25534 result = NULL((void*)0);
25535 _bala_code_node_unref0 (ma)((ma == ((void*)0)) ? ((void*)0) : (ma = (bala_code_node_unref
(ma), ((void*)0))))
;
25536 return result;
25537}
25538
25539static gboolean
25540bala_ccode_base_module_is_limited_generic_type (BalaGenericType* type)
25541{
25542 BalaClass* cl = NULL((void*)0);
25543 BalaTypeParameter* _tmp0_;
25544 BalaTypeParameter* _tmp1_;
25545 BalaSymbol* _tmp2_;
25546 BalaSymbol* _tmp3_;
25547 BalaStruct* st = NULL((void*)0);
25548 BalaTypeParameter* _tmp4_;
25549 BalaTypeParameter* _tmp5_;
25550 BalaSymbol* _tmp6_;
25551 BalaSymbol* _tmp7_;
25552 gboolean _tmp8_ = FALSE(0);
25553 gboolean _tmp9_ = FALSE(0);
25554 BalaClass* _tmp10_;
25555 gboolean result = FALSE(0);
25556 g_return_val_if_fail (type != NULL, FALSE)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return ((0)); } } while (0)
;
25557 _tmp0_ = bala_generic_type_get_type_parameter (type);
25558 _tmp1_ = _tmp0_;
25559 _tmp2_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp1_);
25560 _tmp3_ = _tmp2_;
25561 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp3_) : NULL((void*)0);
25562 _tmp4_ = bala_generic_type_get_type_parameter (type);
25563 _tmp5_ = _tmp4_;
25564 _tmp6_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp5_);
25565 _tmp7_ = _tmp6_;
25566 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp7_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp7_) : NULL((void*)0);
25567 _tmp10_ = cl;
25568 if (_tmp10_ != NULL((void*)0)) {
25569 BalaClass* _tmp11_;
25570 gboolean _tmp12_;
25571 gboolean _tmp13_;
25572 _tmp11_ = cl;
25573 _tmp12_ = bala_class_get_is_compact (_tmp11_);
25574 _tmp13_ = _tmp12_;
25575 _tmp9_ = _tmp13_;
25576 } else {
25577 _tmp9_ = FALSE(0);
25578 }
25579 if (_tmp9_) {
25580 _tmp8_ = TRUE(!(0));
25581 } else {
25582 BalaStruct* _tmp14_;
25583 _tmp14_ = st;
25584 _tmp8_ = _tmp14_ != NULL((void*)0);
25585 }
25586 if (_tmp8_) {
25587 result = TRUE(!(0));
25588 return result;
25589 }
25590 result = FALSE(0);
25591 return result;
25592}
25593
25594gboolean
25595bala_ccode_base_module_requires_copy (BalaDataType* type)
25596{
25597 BalaClass* cl = NULL((void*)0);
25598 BalaTypeSymbol* _tmp0_;
25599 BalaTypeSymbol* _tmp1_;
25600 gboolean _tmp2_ = FALSE(0);
25601 gboolean _tmp3_ = FALSE(0);
25602 BalaClass* _tmp4_;
25603 gboolean result = FALSE(0);
25604 g_return_val_if_fail (type != NULL, FALSE)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return ((0)); } } while (0)
;
25605 if (!bala_data_type_is_disposable (type)) {
25606 result = FALSE(0);
25607 return result;
25608 }
25609 _tmp0_ = bala_data_type_get_type_symbol (type);
25610 _tmp1_ = _tmp0_;
25611 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp1_) : NULL((void*)0);
25612 _tmp4_ = cl;
25613 if (_tmp4_ != NULL((void*)0)) {
25614 BalaClass* _tmp5_;
25615 _tmp5_ = cl;
25616 _tmp3_ = bala_is_reference_counting ((BalaTypeSymbol*) _tmp5_);
25617 } else {
25618 _tmp3_ = FALSE(0);
25619 }
25620 if (_tmp3_) {
25621 BalaClass* _tmp6_;
25622 gchar* _tmp7_;
25623 gchar* _tmp8_;
25624 _tmp6_ = cl;
25625 _tmp7_ = bala_get_ccode_ref_function ((BalaTypeSymbol*) _tmp6_);
25626 _tmp8_ = _tmp7_;
25627 _tmp2_ = g_strcmp0 (_tmp8_, "") == 0;
25628 _g_free0 (_tmp8_)(_tmp8_ = (g_free (_tmp8_), ((void*)0)));
25629 } else {
25630 _tmp2_ = FALSE(0);
25631 }
25632 if (_tmp2_) {
25633 result = FALSE(0);
25634 return result;
25635 }
25636 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
25637 if (bala_ccode_base_module_is_limited_generic_type (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
)) {
25638 result = FALSE(0);
25639 return result;
25640 }
25641 }
25642 result = TRUE(!(0));
25643 return result;
25644}
25645
25646gboolean
25647bala_ccode_base_module_requires_destroy (BalaDataType* type)
25648{
25649 BalaArrayType* array_type = NULL((void*)0);
25650 BalaArrayType* _tmp0_;
25651 gboolean _tmp1_ = FALSE(0);
25652 BalaArrayType* _tmp2_;
25653 BalaClass* cl = NULL((void*)0);
25654 BalaTypeSymbol* _tmp9_;
25655 BalaTypeSymbol* _tmp10_;
25656 gboolean _tmp11_ = FALSE(0);
25657 gboolean _tmp12_ = FALSE(0);
25658 BalaClass* _tmp13_;
25659 gboolean result = FALSE(0);
25660 g_return_val_if_fail (type != NULL, FALSE)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return ((0)); } } while (0)
;
25661 if (!bala_data_type_is_disposable (type)) {
25662 result = FALSE(0);
25663 return result;
25664 }
25665 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_array_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) type) : NULL((void*)0));
25666 array_type = _tmp0_;
25667 _tmp2_ = array_type;
25668 if (_tmp2_ != NULL((void*)0)) {
25669 BalaArrayType* _tmp3_;
25670 gboolean _tmp4_;
25671 gboolean _tmp5_;
25672 _tmp3_ = array_type;
25673 _tmp4_ = bala_array_type_get_fixed_length (_tmp3_);
25674 _tmp5_ = _tmp4_;
25675 _tmp1_ = _tmp5_;
25676 } else {
25677 _tmp1_ = FALSE(0);
25678 }
25679 if (_tmp1_) {
25680 BalaArrayType* _tmp6_;
25681 BalaDataType* _tmp7_;
25682 BalaDataType* _tmp8_;
25683 _tmp6_ = array_type;
25684 _tmp7_ = bala_array_type_get_element_type (_tmp6_);
25685 _tmp8_ = _tmp7_;
25686 result = bala_ccode_base_module_requires_destroy (_tmp8_);
25687 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
25688 return result;
25689 }
25690 _tmp9_ = bala_data_type_get_type_symbol (type);
25691 _tmp10_ = _tmp9_;
25692 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp10_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp10_) : NULL((void*)0);
25693 _tmp13_ = cl;
25694 if (_tmp13_ != NULL((void*)0)) {
25695 BalaClass* _tmp14_;
25696 _tmp14_ = cl;
25697 _tmp12_ = bala_is_reference_counting ((BalaTypeSymbol*) _tmp14_);
25698 } else {
25699 _tmp12_ = FALSE(0);
25700 }
25701 if (_tmp12_) {
25702 BalaClass* _tmp15_;
25703 gchar* _tmp16_;
25704 gchar* _tmp17_;
25705 _tmp15_ = cl;
25706 _tmp16_ = bala_get_ccode_unref_function ((BalaObjectTypeSymbol*) _tmp15_);
25707 _tmp17_ = _tmp16_;
25708 _tmp11_ = g_strcmp0 (_tmp17_, "") == 0;
25709 _g_free0 (_tmp17_)(_tmp17_ = (g_free (_tmp17_), ((void*)0)));
25710 } else {
25711 _tmp11_ = FALSE(0);
25712 }
25713 if (_tmp11_) {
25714 result = FALSE(0);
25715 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
25716 return result;
25717 }
25718 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
25719 if (bala_ccode_base_module_is_limited_generic_type (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_GENERIC_TYPE, BalaGenericType)(((BalaGenericType*) g_type_check_instance_cast ((GTypeInstance
*) (type), ((bala_generic_type_get_type ())))))
)) {
25720 result = FALSE(0);
25721 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
25722 return result;
25723 }
25724 }
25725 result = TRUE(!(0));
25726 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
25727 return result;
25728}
25729
25730static BalaTargetValue*
25731bala_ccode_base_module_real_copy_value (BalaCCodeBaseModule* self,
25732 BalaTargetValue* value,
25733 BalaCodeNode* node)
25734{
25735 BalaDataType* type = NULL((void*)0);
25736 BalaDataType* _tmp0_;
25737 BalaDataType* _tmp1_;
25738 BalaDataType* _tmp2_;
25739 BalaCCodeExpression* cexpr = NULL((void*)0);
25740 BalaCCodeExpression* _tmp3_;
25741 BalaCCodeExpression* _tmp4_;
25742 BalaGLibValue* _result_ = NULL((void*)0);
25743 BalaGLibValue* _tmp5_;
25744 BalaDataType* _tmp6_;
25745 gboolean _tmp23_ = FALSE(0);
25746 BalaDataType* _tmp24_;
25747 BalaCCodeExpression* dupexpr = NULL((void*)0);
25748 BalaDataType* _tmp117_;
25749 BalaSourceReference* _tmp118_;
25750 BalaSourceReference* _tmp119_;
25751 BalaCCodeExpression* _tmp120_;
25752 BalaCCodeExpression* _tmp121_;
25753 gboolean _tmp122_ = FALSE(0);
25754 gboolean _tmp123_ = FALSE(0);
25755 gboolean _tmp124_ = FALSE(0);
25756 BalaCCodeExpression* _tmp125_;
25757 BalaCCodeFunctionCall* ccall = NULL((void*)0);
25758 BalaCCodeExpression* _tmp188_;
25759 BalaCCodeFunctionCall* _tmp189_;
25760 gboolean _tmp190_ = FALSE(0);
25761 gboolean _tmp191_ = FALSE(0);
25762 BalaDataType* _tmp192_;
25763 BalaTargetValue* result = NULL((void*)0);
25764 g_return_val_if_fail (value != NULL, NULL)do { if ((value != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value != NULL"
); return (((void*)0)); } } while (0)
;
1
Assuming 'value' is not equal to null
2
Taking true branch
3
Loop condition is false. Exiting loop
25765 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
4
Assuming 'node' is not equal to null
5
Taking true branch
6
Loop condition is false. Exiting loop
25766 _tmp0_ = bala_target_value_get_value_type (value);
25767 _tmp1_ = _tmp0_;
25768 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
25769 type = _tmp2_;
25770 _tmp3_ = bala_get_cvalue_ (value);
25771 _tmp4_ = _bala_ccode_node_ref0 (_tmp3_);
25772 cexpr = _tmp4_;
25773 _tmp5_ = bala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (value, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (value), ((bala_glib_value_get_type ())))))
);
25774 _result_ = _tmp5_;
25775 _tmp6_ = type;
25776 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp6_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp6_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
7
Assuming '__inst' is non-null
8
Taking false branch
9
Assuming field 'g_class' is null
10
Assuming the condition is false
11
Taking false branch
25777 BalaDelegateType* delegate_type = NULL((void*)0);
25778 BalaDataType* _tmp7_;
25779 BalaDelegateType* _tmp8_;
25780 gboolean _tmp9_ = FALSE(0);
25781 gboolean _tmp10_ = FALSE(0);
25782 BalaGLibValue* _tmp21_;
25783 BalaCCodeConstant* _tmp22_;
25784 _tmp7_ = type;
25785 _tmp8_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp7_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp7_), ((bala_delegate_type_get_type ())))))
);
25786 delegate_type = _tmp8_;
25787 if (bala_get_ccode_delegate_target (node)) {
25788 BalaDelegateType* _tmp11_;
25789 BalaDelegate* _tmp12_;
25790 BalaDelegate* _tmp13_;
25791 gboolean _tmp14_;
25792 gboolean _tmp15_;
25793 _tmp11_ = delegate_type;
25794 _tmp12_ = bala_delegate_type_get_delegate_symbol (_tmp11_);
25795 _tmp13_ = _tmp12_;
25796 _tmp14_ = bala_delegate_get_has_target (_tmp13_);
25797 _tmp15_ = _tmp14_;
25798 _tmp10_ = _tmp15_;
25799 } else {
25800 _tmp10_ = FALSE(0);
25801 }
25802 if (_tmp10_) {
25803 BalaCodeContext* _tmp16_;
25804 gboolean _tmp17_;
25805 gboolean _tmp18_;
25806 _tmp16_ = self->priv->_context;
25807 _tmp17_ = bala_code_context_get_deprecated (_tmp16_);
25808 _tmp18_ = _tmp17_;
25809 _tmp9_ = !_tmp18_;
25810 } else {
25811 _tmp9_ = FALSE(0);
25812 }
25813 if (_tmp9_) {
25814 BalaSourceReference* _tmp19_;
25815 BalaSourceReference* _tmp20_;
25816 _tmp19_ = bala_code_node_get_source_reference (node);
25817 _tmp20_ = _tmp19_;
25818 bala_report_deprecated (_tmp20_, "copying delegates is not supported");
25819 }
25820 _tmp21_ = _result_;
25821 _tmp22_ = bala_ccode_constant_new ("NULL");
25822 _bala_ccode_node_unref0 (_tmp21_->delegate_target_destroy_notify_cvalue)((_tmp21_->delegate_target_destroy_notify_cvalue == ((void
*)0)) ? ((void*)0) : (_tmp21_->delegate_target_destroy_notify_cvalue
= (bala_ccode_node_unref (_tmp21_->delegate_target_destroy_notify_cvalue
), ((void*)0))))
;
25823 _tmp21_->delegate_target_destroy_notify_cvalue = (BalaCCodeExpression*) _tmp22_;
25824 result = (BalaTargetValue*) _result_;
25825 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
25826 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
25827 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
25828 return result;
25829 }
25830 _tmp24_ = type;
25831 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp24_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp24_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
12
Taking false branch
13
Assuming the condition is true
14
Taking true branch
25832 BalaDataType* _tmp25_;
25833 gboolean _tmp26_;
25834 gboolean _tmp27_;
25835 _tmp25_ = type;
25836 _tmp26_ = bala_data_type_get_nullable (_tmp25_);
25837 _tmp27_ = _tmp26_;
25838 _tmp23_ = !_tmp27_;
15
Assuming '_tmp27_' is 0
25839 } else {
25840 _tmp23_ = FALSE(0);
25841 }
25842 if (_tmp23_
15.1
'_tmp23_' is 1
) {
16
Taking true branch
25843 BalaTargetValue* temp_cvalue = NULL((void*)0);
25844 BalaDataType* _tmp28_;
25845 BalaTargetValue* _tmp29_;
25846 BalaTargetValue* _tmp30_;
25847 BalaSourceReference* _tmp31_;
25848 BalaSourceReference* _tmp32_;
25849 BalaTargetValue* _tmp33_;
25850 BalaCCodeExpression* _tmp34_;
25851 BalaCCodeExpression* _tmp35_;
25852 BalaTargetValue* temp_value = NULL((void*)0);
25853 BalaDataType* _tmp36_;
25854 gboolean _tmp37_;
25855 BalaTargetValue* _tmp38_;
25856 BalaCCodeExpression* ctemp = NULL((void*)0);
25857 BalaTargetValue* _tmp39_;
25858 BalaCCodeExpression* _tmp40_;
25859 BalaCCodeExpression* _tmp41_;
25860 BalaValueType* vt = NULL((void*)0);
25861 BalaDataType* _tmp42_;
25862 BalaValueType* _tmp43_;
25863 BalaStruct* st = NULL((void*)0);
25864 BalaValueType* _tmp44_;
25865 BalaTypeSymbol* _tmp45_;
25866 BalaTypeSymbol* _tmp46_;
25867 BalaStruct* _tmp47_;
25868 BalaCCodeFunctionCall* copy_call = NULL((void*)0);
25869 BalaStruct* _tmp48_;
25870 gchar* _tmp49_;
25871 gchar* _tmp50_;
25872 BalaCCodeIdentifier* _tmp51_;
25873 BalaCCodeIdentifier* _tmp52_;
25874 BalaCCodeFunctionCall* _tmp53_;
25875 BalaCCodeFunctionCall* _tmp54_;
25876 BalaCCodeFunctionCall* _tmp55_;
25877 BalaCCodeExpression* _tmp56_;
25878 BalaCCodeUnaryExpression* _tmp57_;
25879 BalaCCodeUnaryExpression* _tmp58_;
25880 BalaCCodeFunctionCall* _tmp59_;
25881 BalaCCodeExpression* _tmp60_;
25882 BalaCCodeUnaryExpression* _tmp61_;
25883 BalaCCodeUnaryExpression* _tmp62_;
25884 BalaStruct* _tmp63_;
25885 gboolean _tmp65_ = FALSE(0);
25886 BalaStruct* _tmp66_;
25887 _tmp28_ = type;
25888 _tmp29_ = bala_ccode_base_module_create_temp_value (self, _tmp28_, FALSE(0), node, NULL((void*)0));
25889 temp_cvalue = _tmp29_;
25890 _tmp30_ = temp_cvalue;
25891 _tmp31_ = bala_code_node_get_source_reference (node);
25892 _tmp32_ = _tmp31_;
25893 bala_ccode_base_module_store_value (self, _tmp30_, value, _tmp32_);
25894 _tmp33_ = temp_cvalue;
25895 _tmp34_ = bala_get_cvalue_ (_tmp33_);
25896 _tmp35_ = _bala_ccode_node_ref0 (_tmp34_);
25897 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
17
'?' condition is true
25898 cexpr = _tmp35_;
25899 _tmp36_ = type;
25900 _tmp37_ = TRUE(!(0));
25901 _tmp38_ = bala_ccode_base_module_create_temp_value (self, _tmp36_, TRUE(!(0)), node, &_tmp37_);
25902 temp_value = _tmp38_;
25903 _tmp39_ = temp_value;
25904 _tmp40_ = bala_get_cvalue_ (_tmp39_);
25905 _tmp41_ = _bala_ccode_node_ref0 (_tmp40_);
25906 ctemp = _tmp41_;
25907 _tmp42_ = type;
25908 _tmp43_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, BALA_TYPE_VALUE_TYPE, BalaValueType)(((BalaValueType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp42_), ((bala_value_type_get_type ())))))
);
25909 vt = _tmp43_;
25910 _tmp44_ = vt;
25911 _tmp45_ = bala_data_type_get_type_symbol ((BalaDataType*) _tmp44_);
25912 _tmp46_ = _tmp45_;
25913 _tmp47_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp46_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp46_), ((bala_struct_get_type ())))))
);
25914 st = _tmp47_;
25915 _tmp48_ = st;
25916 _tmp49_ = bala_get_ccode_copy_function ((BalaTypeSymbol*) _tmp48_);
25917 _tmp50_ = _tmp49_;
25918 _tmp51_ = bala_ccode_identifier_new (_tmp50_);
25919 _tmp52_ = _tmp51_;
25920 _tmp53_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp52_);
25921 _tmp54_ = _tmp53_;
25922 _bala_ccode_node_unref0 (_tmp52_)((_tmp52_ == ((void*)0)) ? ((void*)0) : (_tmp52_ = (bala_ccode_node_unref
(_tmp52_), ((void*)0))))
;
18
Assuming '_tmp52_' is equal to null
19
'?' condition is true
25923 _g_free0 (_tmp50_)(_tmp50_ = (g_free (_tmp50_), ((void*)0)));
25924 copy_call = _tmp54_;
25925 _tmp55_ = copy_call;
25926 _tmp56_ = cexpr;
25927 _tmp57_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp56_);
25928 _tmp58_ = _tmp57_;
25929 bala_ccode_function_call_add_argument (_tmp55_, (BalaCCodeExpression*) _tmp58_);
25930 _bala_ccode_node_unref0 (_tmp58_)((_tmp58_ == ((void*)0)) ? ((void*)0) : (_tmp58_ = (bala_ccode_node_unref
(_tmp58_), ((void*)0))))
;
20
Assuming '_tmp58_' is equal to null
21
'?' condition is true
25931 _tmp59_ = copy_call;
25932 _tmp60_ = ctemp;
25933 _tmp61_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp60_);
25934 _tmp62_ = _tmp61_;
25935 bala_ccode_function_call_add_argument (_tmp59_, (BalaCCodeExpression*) _tmp62_);
25936 _bala_ccode_node_unref0 (_tmp62_)((_tmp62_ == ((void*)0)) ? ((void*)0) : (_tmp62_ = (bala_ccode_node_unref
(_tmp62_), ((void*)0))))
;
22
Assuming '_tmp62_' is equal to null
23
'?' condition is true
25937 _tmp63_ = st;
25938 if (!bala_get_ccode_has_copy_function (_tmp63_)) {
24
Assuming the condition is true
25
Taking true branch
25939 BalaStruct* _tmp64_;
25940 _tmp64_ = st;
25941 bala_ccode_base_module_generate_struct_copy_function (self, _tmp64_);
26
Calling 'bala_ccode_base_module_generate_struct_copy_function'
90
Returning from 'bala_ccode_base_module_generate_struct_copy_function'
25942 }
25943 _tmp66_ = self->gvalue_type;
25944 if (_tmp66_ != NULL((void*)0)) {
91
Assuming '_tmp66_' is equal to NULL
92
Taking false branch
25945 BalaDataType* _tmp67_;
25946 BalaTypeSymbol* _tmp68_;
25947 BalaTypeSymbol* _tmp69_;
25948 BalaStruct* _tmp70_;
25949 _tmp67_ = type;
25950 _tmp68_ = bala_data_type_get_type_symbol (_tmp67_);
25951 _tmp69_ = _tmp68_;
25952 _tmp70_ = self->gvalue_type;
25953 _tmp65_ = _tmp69_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp70_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp70_), ((bala_typesymbol_get_type ())))))
;
25954 } else {
25955 _tmp65_ = FALSE(0);
25956 }
25957 if (_tmp65_
92.1
'_tmp65_' is 0
) {
93
Taking false branch
25958 BalaCCodeFunctionCall* cisvalid = NULL((void*)0);
25959 BalaCCodeIdentifier* _tmp71_;
25960 BalaCCodeIdentifier* _tmp72_;
25961 BalaCCodeFunctionCall* _tmp73_;
25962 BalaCCodeFunctionCall* _tmp74_;
25963 BalaCCodeFunctionCall* _tmp75_;
25964 BalaCCodeExpression* _tmp76_;
25965 BalaCCodeUnaryExpression* _tmp77_;
25966 BalaCCodeUnaryExpression* _tmp78_;
25967 BalaCCodeFunction* _tmp79_;
25968 BalaCCodeFunction* _tmp80_;
25969 BalaCCodeFunctionCall* _tmp81_;
25970 BalaCCodeFunctionCall* value_type_call = NULL((void*)0);
25971 BalaCCodeIdentifier* _tmp82_;
25972 BalaCCodeIdentifier* _tmp83_;
25973 BalaCCodeFunctionCall* _tmp84_;
25974 BalaCCodeFunctionCall* _tmp85_;
25975 BalaCCodeFunctionCall* _tmp86_;
25976 BalaCCodeExpression* _tmp87_;
25977 BalaCCodeUnaryExpression* _tmp88_;
25978 BalaCCodeUnaryExpression* _tmp89_;
25979 BalaCCodeFunctionCall* init_call = NULL((void*)0);
25980 BalaCCodeIdentifier* _tmp90_;
25981 BalaCCodeIdentifier* _tmp91_;
25982 BalaCCodeFunctionCall* _tmp92_;
25983 BalaCCodeFunctionCall* _tmp93_;
25984 BalaCCodeFunctionCall* _tmp94_;
25985 BalaCCodeExpression* _tmp95_;
25986 BalaCCodeUnaryExpression* _tmp96_;
25987 BalaCCodeUnaryExpression* _tmp97_;
25988 BalaCCodeFunctionCall* _tmp98_;
25989 BalaCCodeFunctionCall* _tmp99_;
25990 BalaCCodeFunction* _tmp100_;
25991 BalaCCodeFunction* _tmp101_;
25992 BalaCCodeFunctionCall* _tmp102_;
25993 BalaCCodeFunction* _tmp103_;
25994 BalaCCodeFunction* _tmp104_;
25995 BalaCCodeFunctionCall* _tmp105_;
25996 BalaCCodeFunction* _tmp106_;
25997 BalaCCodeFunction* _tmp107_;
25998 BalaTargetValue* _tmp108_;
25999 BalaTargetValue* _tmp109_;
26000 BalaSourceReference* _tmp110_;
26001 BalaSourceReference* _tmp111_;
26002 BalaCCodeFunction* _tmp112_;
26003 BalaCCodeFunction* _tmp113_;
26004 _tmp71_ = bala_ccode_identifier_new ("G_IS_VALUE");
26005 _tmp72_ = _tmp71_;
26006 _tmp73_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp72_);
26007 _tmp74_ = _tmp73_;
26008 _bala_ccode_node_unref0 (_tmp72_)((_tmp72_ == ((void*)0)) ? ((void*)0) : (_tmp72_ = (bala_ccode_node_unref
(_tmp72_), ((void*)0))))
;
26009 cisvalid = _tmp74_;
26010 _tmp75_ = cisvalid;
26011 _tmp76_ = cexpr;
26012 _tmp77_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp76_);
26013 _tmp78_ = _tmp77_;
26014 bala_ccode_function_call_add_argument (_tmp75_, (BalaCCodeExpression*) _tmp78_);
26015 _bala_ccode_node_unref0 (_tmp78_)((_tmp78_ == ((void*)0)) ? ((void*)0) : (_tmp78_ = (bala_ccode_node_unref
(_tmp78_), ((void*)0))))
;
26016 _tmp79_ = bala_ccode_base_module_get_ccode (self);
26017 _tmp80_ = _tmp79_;
26018 _tmp81_ = cisvalid;
26019 bala_ccode_function_open_if (_tmp80_, (BalaCCodeExpression*) _tmp81_);
26020 _tmp82_ = bala_ccode_identifier_new ("G_VALUE_TYPE");
26021 _tmp83_ = _tmp82_;
26022 _tmp84_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp83_);
26023 _tmp85_ = _tmp84_;
26024 _bala_ccode_node_unref0 (_tmp83_)((_tmp83_ == ((void*)0)) ? ((void*)0) : (_tmp83_ = (bala_ccode_node_unref
(_tmp83_), ((void*)0))))
;
26025 value_type_call = _tmp85_;
26026 _tmp86_ = value_type_call;
26027 _tmp87_ = cexpr;
26028 _tmp88_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp87_);
26029 _tmp89_ = _tmp88_;
26030 bala_ccode_function_call_add_argument (_tmp86_, (BalaCCodeExpression*) _tmp89_);
26031 _bala_ccode_node_unref0 (_tmp89_)((_tmp89_ == ((void*)0)) ? ((void*)0) : (_tmp89_ = (bala_ccode_node_unref
(_tmp89_), ((void*)0))))
;
26032 _tmp90_ = bala_ccode_identifier_new ("g_value_init");
26033 _tmp91_ = _tmp90_;
26034 _tmp92_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp91_);
26035 _tmp93_ = _tmp92_;
26036 _bala_ccode_node_unref0 (_tmp91_)((_tmp91_ == ((void*)0)) ? ((void*)0) : (_tmp91_ = (bala_ccode_node_unref
(_tmp91_), ((void*)0))))
;
26037 init_call = _tmp93_;
26038 _tmp94_ = init_call;
26039 _tmp95_ = ctemp;
26040 _tmp96_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp95_);
26041 _tmp97_ = _tmp96_;
26042 bala_ccode_function_call_add_argument (_tmp94_, (BalaCCodeExpression*) _tmp97_);
26043 _bala_ccode_node_unref0 (_tmp97_)((_tmp97_ == ((void*)0)) ? ((void*)0) : (_tmp97_ = (bala_ccode_node_unref
(_tmp97_), ((void*)0))))
;
26044 _tmp98_ = init_call;
26045 _tmp99_ = value_type_call;
26046 bala_ccode_function_call_add_argument (_tmp98_, (BalaCCodeExpression*) _tmp99_);
26047 _tmp100_ = bala_ccode_base_module_get_ccode (self);
26048 _tmp101_ = _tmp100_;
26049 _tmp102_ = init_call;
26050 bala_ccode_function_add_expression (_tmp101_, (BalaCCodeExpression*) _tmp102_);
26051 _tmp103_ = bala_ccode_base_module_get_ccode (self);
26052 _tmp104_ = _tmp103_;
26053 _tmp105_ = copy_call;
26054 bala_ccode_function_add_expression (_tmp104_, (BalaCCodeExpression*) _tmp105_);
26055 _tmp106_ = bala_ccode_base_module_get_ccode (self);
26056 _tmp107_ = _tmp106_;
26057 bala_ccode_function_add_else (_tmp107_);
26058 _tmp108_ = temp_value;
26059 _tmp109_ = temp_cvalue;
26060 _tmp110_ = bala_code_node_get_source_reference (node);
26061 _tmp111_ = _tmp110_;
26062 bala_ccode_base_module_store_value (self, _tmp108_, _tmp109_, _tmp111_);
26063 _tmp112_ = bala_ccode_base_module_get_ccode (self);
26064 _tmp113_ = _tmp112_;
26065 bala_ccode_function_close (_tmp113_);
26066 _bala_ccode_node_unref0 (init_call)((init_call == ((void*)0)) ? ((void*)0) : (init_call = (bala_ccode_node_unref
(init_call), ((void*)0))))
;
26067 _bala_ccode_node_unref0 (value_type_call)((value_type_call == ((void*)0)) ? ((void*)0) : (value_type_call
= (bala_ccode_node_unref (value_type_call), ((void*)0))))
;
26068 _bala_ccode_node_unref0 (cisvalid)((cisvalid == ((void*)0)) ? ((void*)0) : (cisvalid = (bala_ccode_node_unref
(cisvalid), ((void*)0))))
;
26069 } else {
26070 BalaCCodeFunction* _tmp114_;
26071 BalaCCodeFunction* _tmp115_;
26072 BalaCCodeFunctionCall* _tmp116_;
26073 _tmp114_ = bala_ccode_base_module_get_ccode (self);
94
Calling 'bala_ccode_base_module_get_ccode'
26074 _tmp115_ = _tmp114_;
26075 _tmp116_ = copy_call;
26076 bala_ccode_function_add_expression (_tmp115_, (BalaCCodeExpression*) _tmp116_);
26077 }
26078 result = temp_value;
26079 _bala_ccode_node_unref0 (copy_call)((copy_call == ((void*)0)) ? ((void*)0) : (copy_call = (bala_ccode_node_unref
(copy_call), ((void*)0))))
;
26080 _bala_code_node_unref0 (st)((st == ((void*)0)) ? ((void*)0) : (st = (bala_code_node_unref
(st), ((void*)0))))
;
26081 _bala_code_node_unref0 (vt)((vt == ((void*)0)) ? ((void*)0) : (vt = (bala_code_node_unref
(vt), ((void*)0))))
;
26082 _bala_ccode_node_unref0 (ctemp)((ctemp == ((void*)0)) ? ((void*)0) : (ctemp = (bala_ccode_node_unref
(ctemp), ((void*)0))))
;
26083 _bala_target_value_unref0 (temp_cvalue)((temp_cvalue == ((void*)0)) ? ((void*)0) : (temp_cvalue = (bala_target_value_unref
(temp_cvalue), ((void*)0))))
;
26084 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
26085 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
26086 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
26087 return result;
26088 }
26089 _tmp117_ = type;
26090 _tmp118_ = bala_code_node_get_source_reference (node);
26091 _tmp119_ = _tmp118_;
26092 _tmp120_ = bala_ccode_base_module_get_dup_func_expression (self, _tmp117_, _tmp119_, FALSE(0));
26093 dupexpr = _tmp120_;
26094 _tmp121_ = dupexpr;
26095 if (_tmp121_ == NULL((void*)0)) {
26096 bala_code_node_set_error (node, TRUE(!(0)));
26097 result = NULL((void*)0);
26098 _bala_ccode_node_unref0 (dupexpr)((dupexpr == ((void*)0)) ? ((void*)0) : (dupexpr = (bala_ccode_node_unref
(dupexpr), ((void*)0))))
;
26099 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
26100 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
26101 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
26102 return result;
26103 }
26104 _tmp125_ = dupexpr;
26105 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp125_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp125_); GType __t = ((bala_ccode_identifier_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
26106 BalaDataType* _tmp126_;
26107 _tmp126_ = type;
26108 _tmp124_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp126_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp126_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
26109 } else {
26110 _tmp124_ = FALSE(0);
26111 }
26112 if (_tmp124_) {
26113 BalaDataType* _tmp127_;
26114 _tmp127_ = type;
26115 _tmp123_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp127_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp127_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
26116 } else {
26117 _tmp123_ = FALSE(0);
26118 }
26119 if (_tmp123_) {
26120 BalaDataType* _tmp128_;
26121 _tmp128_ = type;
26122 _tmp122_ = !bala_is_ref_function_void (_tmp128_);
26123 } else {
26124 _tmp122_ = FALSE(0);
26125 }
26126 if (_tmp122_) {
26127 BalaCCodeIdentifier* dupid = NULL((void*)0);
26128 BalaCCodeExpression* _tmp129_;
26129 BalaCCodeIdentifier* _tmp130_;
26130 gchar* dup0_func = NULL((void*)0);
26131 BalaCCodeIdentifier* _tmp131_;
26132 const gchar* _tmp132_;
26133 const gchar* _tmp133_;
26134 gchar* _tmp134_;
26135 BalaCCodeIdentifier* _tmp135_;
26136 const gchar* _tmp136_;
26137 const gchar* _tmp137_;
26138 BalaCCodeFunctionCall* ccall = NULL((void*)0);
26139 const gchar* _tmp173_;
26140 BalaCCodeIdentifier* _tmp174_;
26141 BalaCCodeIdentifier* _tmp175_;
26142 BalaCCodeFunctionCall* _tmp176_;
26143 BalaCCodeFunctionCall* _tmp177_;
26144 BalaCCodeFunctionCall* _tmp178_;
26145 BalaCCodeExpression* _tmp179_;
26146 BalaGLibValue* _tmp180_;
26147 BalaCCodeFunctionCall* _tmp181_;
26148 BalaCCodeExpression* _tmp182_;
26149 BalaGLibValue* _tmp183_;
26150 BalaDataType* _tmp184_;
26151 BalaDataType* _tmp185_;
26152 BalaGLibValue* _tmp186_;
26153 BalaTargetValue* _tmp187_;
26154 _tmp129_ = dupexpr;
26155 _tmp130_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp129_, BALA_TYPE_CCODE_IDENTIFIER, BalaCCodeIdentifier)(((BalaCCodeIdentifier*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp129_), ((bala_ccode_identifier_get_type ())))))
);
26156 dupid = _tmp130_;
26157 _tmp131_ = dupid;
26158 _tmp132_ = bala_ccode_identifier_get_name (_tmp131_);
26159 _tmp133_ = _tmp132_;
26160 _tmp134_ = g_strdup_printf ("_%s0", _tmp133_);
26161 dup0_func = _tmp134_;
26162 _tmp135_ = dupid;
26163 _tmp136_ = bala_ccode_identifier_get_name (_tmp135_);
26164 _tmp137_ = _tmp136_;
26165 if (g_strcmp0 (_tmp137_, "g_strdup") == 0) {
26166 BalaCCodeIdentifier* _tmp138_;
26167 const gchar* _tmp139_;
26168 const gchar* _tmp140_;
26169 gchar* _tmp141_;
26170 _tmp138_ = dupid;
26171 _tmp139_ = bala_ccode_identifier_get_name (_tmp138_);
26172 _tmp140_ = _tmp139_;
26173 _tmp141_ = g_strdup (_tmp140_);
26174 _g_free0 (dup0_func)(dup0_func = (g_free (dup0_func), ((void*)0)));
26175 dup0_func = _tmp141_;
26176 } else {
26177 const gchar* _tmp142_;
26178 _tmp142_ = dup0_func;
26179 if (bala_ccode_base_module_add_wrapper (self, _tmp142_)) {
26180 BalaCCodeFunction* dup0_fun = NULL((void*)0);
26181 const gchar* _tmp143_;
26182 BalaDataType* _tmp144_;
26183 gchar* _tmp145_;
26184 gchar* _tmp146_;
26185 BalaCCodeFunction* _tmp147_;
26186 BalaCCodeFunction* _tmp148_;
26187 BalaCCodeFunction* _tmp149_;
26188 BalaDataType* _tmp150_;
26189 gchar* _tmp151_;
26190 gchar* _tmp152_;
26191 BalaCCodeParameter* _tmp153_;
26192 BalaCCodeParameter* _tmp154_;
26193 BalaCCodeFunction* _tmp155_;
26194 BalaCCodeFunction* _tmp156_;
26195 BalaCCodeFunctionCall* dup_call = NULL((void*)0);
26196 BalaCCodeExpression* _tmp157_;
26197 BalaCCodeFunctionCall* _tmp158_;
26198 BalaCCodeFunctionCall* _tmp159_;
26199 BalaCCodeIdentifier* _tmp160_;
26200 BalaCCodeIdentifier* _tmp161_;
26201 BalaCCodeFunction* _tmp162_;
26202 BalaCCodeFunction* _tmp163_;
26203 BalaCCodeIdentifier* _tmp164_;
26204 BalaCCodeIdentifier* _tmp165_;
26205 BalaCCodeFunctionCall* _tmp166_;
26206 BalaCCodeConstant* _tmp167_;
26207 BalaCCodeConstant* _tmp168_;
26208 BalaCCodeConditionalExpression* _tmp169_;
26209 BalaCCodeConditionalExpression* _tmp170_;
26210 BalaCCodeFile* _tmp171_;
26211 BalaCCodeFunction* _tmp172_;
26212 _tmp143_ = dup0_func;
26213 _tmp144_ = self->pointer_type;
26214 _tmp145_ = bala_get_ccode_name ((BalaCodeNode*) _tmp144_);
26215 _tmp146_ = _tmp145_;
26216 _tmp147_ = bala_ccode_function_new (_tmp143_, _tmp146_);
26217 _tmp148_ = _tmp147_;
26218 _g_free0 (_tmp146_)(_tmp146_ = (g_free (_tmp146_), ((void*)0)));
26219 dup0_fun = _tmp148_;
26220 _tmp149_ = dup0_fun;
26221 _tmp150_ = self->pointer_type;
26222 _tmp151_ = bala_get_ccode_name ((BalaCodeNode*) _tmp150_);
26223 _tmp152_ = _tmp151_;
26224 _tmp153_ = bala_ccode_parameter_new ("self", _tmp152_);
26225 _tmp154_ = _tmp153_;
26226 bala_ccode_function_add_parameter (_tmp149_, _tmp154_);
26227 _bala_ccode_node_unref0 (_tmp154_)((_tmp154_ == ((void*)0)) ? ((void*)0) : (_tmp154_ = (bala_ccode_node_unref
(_tmp154_), ((void*)0))))
;
26228 _g_free0 (_tmp152_)(_tmp152_ = (g_free (_tmp152_), ((void*)0)));
26229 _tmp155_ = dup0_fun;
26230 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp155_, BALA_CCODE_MODIFIERS_STATIC);
26231 _tmp156_ = dup0_fun;
26232 bala_ccode_base_module_push_function (self, _tmp156_);
26233 _tmp157_ = dupexpr;
26234 _tmp158_ = bala_ccode_function_call_new (_tmp157_);
26235 dup_call = _tmp158_;
26236 _tmp159_ = dup_call;
26237 _tmp160_ = bala_ccode_identifier_new ("self");
26238 _tmp161_ = _tmp160_;
26239 bala_ccode_function_call_add_argument (_tmp159_, (BalaCCodeExpression*) _tmp161_);
26240 _bala_ccode_node_unref0 (_tmp161_)((_tmp161_ == ((void*)0)) ? ((void*)0) : (_tmp161_ = (bala_ccode_node_unref
(_tmp161_), ((void*)0))))
;
26241 _tmp162_ = bala_ccode_base_module_get_ccode (self);
26242 _tmp163_ = _tmp162_;
26243 _tmp164_ = bala_ccode_identifier_new ("self");
26244 _tmp165_ = _tmp164_;
26245 _tmp166_ = dup_call;
26246 _tmp167_ = bala_ccode_constant_new ("NULL");
26247 _tmp168_ = _tmp167_;
26248 _tmp169_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp165_, (BalaCCodeExpression*) _tmp166_, (BalaCCodeExpression*) _tmp168_);
26249 _tmp170_ = _tmp169_;
26250 bala_ccode_function_add_return (_tmp163_, (BalaCCodeExpression*) _tmp170_);
26251 _bala_ccode_node_unref0 (_tmp170_)((_tmp170_ == ((void*)0)) ? ((void*)0) : (_tmp170_ = (bala_ccode_node_unref
(_tmp170_), ((void*)0))))
;
26252 _bala_ccode_node_unref0 (_tmp168_)((_tmp168_ == ((void*)0)) ? ((void*)0) : (_tmp168_ = (bala_ccode_node_unref
(_tmp168_), ((void*)0))))
;
26253 _bala_ccode_node_unref0 (_tmp165_)((_tmp165_ == ((void*)0)) ? ((void*)0) : (_tmp165_ = (bala_ccode_node_unref
(_tmp165_), ((void*)0))))
;
26254 bala_ccode_base_module_pop_function (self);
26255 _tmp171_ = self->cfile;
26256 _tmp172_ = dup0_fun;
26257 bala_ccode_file_add_function (_tmp171_, _tmp172_);
26258 _bala_ccode_node_unref0 (dup_call)((dup_call == ((void*)0)) ? ((void*)0) : (dup_call = (bala_ccode_node_unref
(dup_call), ((void*)0))))
;
26259 _bala_ccode_node_unref0 (dup0_fun)((dup0_fun == ((void*)0)) ? ((void*)0) : (dup0_fun = (bala_ccode_node_unref
(dup0_fun), ((void*)0))))
;
26260 }
26261 }
26262 _tmp173_ = dup0_func;
26263 _tmp174_ = bala_ccode_identifier_new (_tmp173_);
26264 _tmp175_ = _tmp174_;
26265 _tmp176_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp175_);
26266 _tmp177_ = _tmp176_;
26267 _bala_ccode_node_unref0 (_tmp175_)((_tmp175_ == ((void*)0)) ? ((void*)0) : (_tmp175_ = (bala_ccode_node_unref
(_tmp175_), ((void*)0))))
;
26268 ccall = _tmp177_;
26269 _tmp178_ = ccall;
26270 _tmp179_ = cexpr;
26271 bala_ccode_function_call_add_argument (_tmp178_, _tmp179_);
26272 _tmp180_ = _result_;
26273 _tmp181_ = ccall;
26274 _tmp182_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp181_);
26275 _bala_ccode_node_unref0 (_tmp180_->cvalue)((_tmp180_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp180_
->cvalue = (bala_ccode_node_unref (_tmp180_->cvalue), (
(void*)0))))
;
26276 _tmp180_->cvalue = _tmp182_;
26277 _tmp183_ = _result_;
26278 _tmp184_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp183_);
26279 _tmp185_ = _tmp184_;
26280 bala_data_type_set_value_owned (_tmp185_, TRUE(!(0)));
26281 _tmp186_ = _result_;
26282 _tmp187_ = bala_ccode_base_module_store_temp_value (self, (BalaTargetValue*) _tmp186_, node, NULL((void*)0));
26283 result = _tmp187_;
26284 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
26285 _g_free0 (dup0_func)(dup0_func = (g_free (dup0_func), ((void*)0)));
26286 _bala_ccode_node_unref0 (dupid)((dupid == ((void*)0)) ? ((void*)0) : (dupid = (bala_ccode_node_unref
(dupid), ((void*)0))))
;
26287 _bala_ccode_node_unref0 (dupexpr)((dupexpr == ((void*)0)) ? ((void*)0) : (dupexpr = (bala_ccode_node_unref
(dupexpr), ((void*)0))))
;
26288 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
26289 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
26290 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
26291 return result;
26292 }
26293 _tmp188_ = dupexpr;
26294 _tmp189_ = bala_ccode_function_call_new (_tmp188_);
26295 ccall = _tmp189_;
26296 _tmp192_ = type;
26297 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp192_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp192_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
26298 _tmp191_ = bala_get_non_null (value);
26299 } else {
26300 _tmp191_ = FALSE(0);
26301 }
26302 if (_tmp191_) {
26303 BalaDataType* _tmp193_;
26304 _tmp193_ = type;
26305 _tmp190_ = !bala_is_ref_function_void (_tmp193_);
26306 } else {
26307 _tmp190_ = FALSE(0);
26308 }
26309 if (_tmp190_) {
26310 BalaCCodeFunctionCall* _tmp194_;
26311 BalaCCodeExpression* _tmp195_;
26312 BalaDataType* _tmp196_;
26313 BalaCCodeFunctionCall* _tmp197_;
26314 BalaGLibValue* _tmp198_;
26315 BalaGLibValue* _tmp199_;
26316 BalaTargetValue* _tmp200_;
26317 BalaTargetValue* _tmp201_;
26318 _tmp194_ = ccall;
26319 _tmp195_ = cexpr;
26320 bala_ccode_function_call_add_argument (_tmp194_, _tmp195_);
26321 _tmp196_ = type;
26322 _tmp197_ = ccall;
26323 _tmp198_ = bala_glib_value_new (_tmp196_, (BalaCCodeExpression*) _tmp197_, FALSE(0));
26324 _tmp199_ = _tmp198_;
26325 _tmp200_ = bala_ccode_base_module_store_temp_value (self, (BalaTargetValue*) _tmp199_, node, NULL((void*)0));
26326 _tmp201_ = _tmp200_;
26327 _bala_target_value_unref0 (_tmp199_)((_tmp199_ == ((void*)0)) ? ((void*)0) : (_tmp199_ = (bala_target_value_unref
(_tmp199_), ((void*)0))))
;
26328 result = _tmp201_;
26329 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
26330 _bala_ccode_node_unref0 (dupexpr)((dupexpr == ((void*)0)) ? ((void*)0) : (dupexpr = (bala_ccode_node_unref
(dupexpr), ((void*)0))))
;
26331 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
26332 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
26333 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
26334 return result;
26335 } else {
26336 BalaCCodeBinaryExpression* cnotnull = NULL((void*)0);
26337 BalaCCodeExpression* _tmp202_;
26338 BalaCCodeConstant* _tmp203_;
26339 BalaCCodeConstant* _tmp204_;
26340 BalaCCodeBinaryExpression* _tmp205_;
26341 BalaCCodeBinaryExpression* _tmp206_;
26342 BalaDataType* _tmp207_;
26343 BalaDataType* _tmp220_;
26344 BalaDataType* _tmp230_;
26345 BalaCCodeExpression* cifnull = NULL((void*)0);
26346 BalaDataType* _tmp249_;
26347 BalaTypeSymbol* _tmp250_;
26348 BalaTypeSymbol* _tmp251_;
26349 BalaDataType* _tmp258_;
26350 _tmp202_ = cexpr;
26351 _tmp203_ = bala_ccode_constant_new ("NULL");
26352 _tmp204_ = _tmp203_;
26353 _tmp205_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp202_, (BalaCCodeExpression*) _tmp204_);
26354 _tmp206_ = _tmp205_;
26355 _bala_ccode_node_unref0 (_tmp204_)((_tmp204_ == ((void*)0)) ? ((void*)0) : (_tmp204_ = (bala_ccode_node_unref
(_tmp204_), ((void*)0))))
;
26356 cnotnull = _tmp206_;
26357 _tmp207_ = type;
26358 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp207_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp207_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
26359 BalaCCodeBinaryExpression* cdupnotnull = NULL((void*)0);
26360 BalaDataType* _tmp208_;
26361 BalaSourceReference* _tmp209_;
26362 BalaSourceReference* _tmp210_;
26363 BalaCCodeExpression* _tmp211_;
26364 BalaCCodeExpression* _tmp212_;
26365 BalaCCodeConstant* _tmp213_;
26366 BalaCCodeConstant* _tmp214_;
26367 BalaCCodeBinaryExpression* _tmp215_;
26368 BalaCCodeBinaryExpression* _tmp216_;
26369 BalaCCodeBinaryExpression* _tmp217_;
26370 BalaCCodeBinaryExpression* _tmp218_;
26371 BalaCCodeBinaryExpression* _tmp219_;
26372 _tmp208_ = type;
26373 _tmp209_ = bala_code_node_get_source_reference (node);
26374 _tmp210_ = _tmp209_;
26375 _tmp211_ = bala_ccode_base_module_get_dup_func_expression (self, _tmp208_, _tmp210_, FALSE(0));
26376 _tmp212_ = _tmp211_;
26377 _tmp213_ = bala_ccode_constant_new ("NULL");
26378 _tmp214_ = _tmp213_;
26379 _tmp215_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp212_, (BalaCCodeExpression*) _tmp214_);
26380 _tmp216_ = _tmp215_;
26381 _bala_ccode_node_unref0 (_tmp214_)((_tmp214_ == ((void*)0)) ? ((void*)0) : (_tmp214_ = (bala_ccode_node_unref
(_tmp214_), ((void*)0))))
;
26382 _bala_ccode_node_unref0 (_tmp212_)((_tmp212_ == ((void*)0)) ? ((void*)0) : (_tmp212_ = (bala_ccode_node_unref
(_tmp212_), ((void*)0))))
;
26383 cdupnotnull = _tmp216_;
26384 _tmp217_ = cnotnull;
26385 _tmp218_ = cdupnotnull;
26386 _tmp219_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_AND, (BalaCCodeExpression*) _tmp217_, (BalaCCodeExpression*) _tmp218_);
26387 _bala_ccode_node_unref0 (cnotnull)((cnotnull == ((void*)0)) ? ((void*)0) : (cnotnull = (bala_ccode_node_unref
(cnotnull), ((void*)0))))
;
26388 cnotnull = _tmp219_;
26389 _bala_ccode_node_unref0 (cdupnotnull)((cdupnotnull == ((void*)0)) ? ((void*)0) : (cdupnotnull = (bala_ccode_node_unref
(cdupnotnull), ((void*)0))))
;
26390 }
26391 _tmp220_ = type;
26392 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp220_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp220_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
26393 BalaCCodeFunctionCall* _tmp221_;
26394 BalaCCodeExpression* _tmp222_;
26395 BalaDataType* _tmp223_;
26396 gchar* _tmp224_;
26397 gchar* _tmp225_;
26398 BalaCCodeCastExpression* _tmp226_;
26399 BalaCCodeCastExpression* _tmp227_;
26400 _tmp221_ = ccall;
26401 _tmp222_ = cexpr;
26402 _tmp223_ = self->pointer_type;
26403 _tmp224_ = bala_get_ccode_name ((BalaCodeNode*) _tmp223_);
26404 _tmp225_ = _tmp224_;
26405 _tmp226_ = bala_ccode_cast_expression_new (_tmp222_, _tmp225_);
26406 _tmp227_ = _tmp226_;
26407 bala_ccode_function_call_add_argument (_tmp221_, (BalaCCodeExpression*) _tmp227_);
26408 _bala_ccode_node_unref0 (_tmp227_)((_tmp227_ == ((void*)0)) ? ((void*)0) : (_tmp227_ = (bala_ccode_node_unref
(_tmp227_), ((void*)0))))
;
26409 _g_free0 (_tmp225_)(_tmp225_ = (g_free (_tmp225_), ((void*)0)));
26410 } else {
26411 BalaCCodeFunctionCall* _tmp228_;
26412 BalaCCodeExpression* _tmp229_;
26413 _tmp228_ = ccall;
26414 _tmp229_ = cexpr;
26415 bala_ccode_function_call_add_argument (_tmp228_, _tmp229_);
26416 }
26417 _tmp230_ = type;
26418 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp230_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp230_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
26419 BalaArrayType* array_type = NULL((void*)0);
26420 BalaDataType* _tmp231_;
26421 BalaArrayType* _tmp232_;
26422 BalaCCodeFunctionCall* _tmp233_;
26423 BalaCCodeExpression* _tmp234_;
26424 BalaCCodeExpression* _tmp235_;
26425 BalaArrayType* _tmp236_;
26426 BalaDataType* _tmp237_;
26427 BalaDataType* _tmp238_;
26428 _tmp231_ = type;
26429 _tmp232_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp231_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp231_), ((bala_array_type_get_type ())))))
);
26430 array_type = _tmp232_;
26431 _tmp233_ = ccall;
26432 _tmp234_ = bala_ccode_base_module_get_array_length_cvalue (self, value, -1);
26433 _tmp235_ = _tmp234_;
26434 bala_ccode_function_call_add_argument (_tmp233_, _tmp235_);
26435 _bala_ccode_node_unref0 (_tmp235_)((_tmp235_ == ((void*)0)) ? ((void*)0) : (_tmp235_ = (bala_ccode_node_unref
(_tmp235_), ((void*)0))))
;
26436 _tmp236_ = array_type;
26437 _tmp237_ = bala_array_type_get_element_type (_tmp236_);
26438 _tmp238_ = _tmp237_;
26439 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp238_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp238_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
26440 BalaCCodeExpression* elem_dupexpr = NULL((void*)0);
26441 BalaArrayType* _tmp239_;
26442 BalaDataType* _tmp240_;
26443 BalaDataType* _tmp241_;
26444 BalaSourceReference* _tmp242_;
26445 BalaSourceReference* _tmp243_;
26446 BalaCCodeExpression* _tmp244_;
26447 BalaCCodeExpression* _tmp245_;
26448 BalaCCodeFunctionCall* _tmp247_;
26449 BalaCCodeExpression* _tmp248_;
26450 _tmp239_ = array_type;
26451 _tmp240_ = bala_array_type_get_element_type (_tmp239_);
26452 _tmp241_ = _tmp240_;
26453 _tmp242_ = bala_code_node_get_source_reference (node);
26454 _tmp243_ = _tmp242_;
26455 _tmp244_ = bala_ccode_base_module_get_dup_func_expression (self, _tmp241_, _tmp243_, FALSE(0));
26456 elem_dupexpr = _tmp244_;
26457 _tmp245_ = elem_dupexpr;
26458 if (_tmp245_ == NULL((void*)0)) {
26459 BalaCCodeConstant* _tmp246_;
26460 _tmp246_ = bala_ccode_constant_new ("NULL");
26461 _bala_ccode_node_unref0 (elem_dupexpr)((elem_dupexpr == ((void*)0)) ? ((void*)0) : (elem_dupexpr = (
bala_ccode_node_unref (elem_dupexpr), ((void*)0))))
;
26462 elem_dupexpr = (BalaCCodeExpression*) _tmp246_;
26463 }
26464 _tmp247_ = ccall;
26465 _tmp248_ = elem_dupexpr;
26466 bala_ccode_function_call_add_argument (_tmp247_, _tmp248_);
26467 _bala_ccode_node_unref0 (elem_dupexpr)((elem_dupexpr == ((void*)0)) ? ((void*)0) : (elem_dupexpr = (
bala_ccode_node_unref (elem_dupexpr), ((void*)0))))
;
26468 }
26469 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
26470 }
26471 _tmp249_ = type;
26472 _tmp250_ = bala_data_type_get_type_symbol (_tmp249_);
26473 _tmp251_ = _tmp250_;
26474 if (_tmp251_ != NULL((void*)0)) {
26475 BalaCCodeConstant* _tmp252_;
26476 _tmp252_ = bala_ccode_constant_new ("NULL");
26477 _bala_ccode_node_unref0 (cifnull)((cifnull == ((void*)0)) ? ((void*)0) : (cifnull = (bala_ccode_node_unref
(cifnull), ((void*)0))))
;
26478 cifnull = (BalaCCodeExpression*) _tmp252_;
26479 } else {
26480 BalaCCodeExpression* _tmp253_;
26481 BalaDataType* _tmp254_;
26482 gchar* _tmp255_;
26483 gchar* _tmp256_;
26484 BalaCCodeCastExpression* _tmp257_;
26485 _tmp253_ = cexpr;
26486 _tmp254_ = self->pointer_type;
26487 _tmp255_ = bala_get_ccode_name ((BalaCodeNode*) _tmp254_);
26488 _tmp256_ = _tmp255_;
26489 _tmp257_ = bala_ccode_cast_expression_new (_tmp253_, _tmp256_);
26490 _bala_ccode_node_unref0 (cifnull)((cifnull == ((void*)0)) ? ((void*)0) : (cifnull = (bala_ccode_node_unref
(cifnull), ((void*)0))))
;
26491 cifnull = (BalaCCodeExpression*) _tmp257_;
26492 _g_free0 (_tmp256_)(_tmp256_ = (g_free (_tmp256_), ((void*)0)));
26493 }
26494 _tmp258_ = type;
26495 if (bala_is_ref_function_void (_tmp258_)) {
26496 BalaCCodeFunction* _tmp259_;
26497 BalaCCodeFunction* _tmp260_;
26498 BalaCCodeBinaryExpression* _tmp261_;
26499 BalaCCodeFunction* _tmp262_;
26500 BalaCCodeFunction* _tmp263_;
26501 BalaCCodeFunctionCall* _tmp264_;
26502 BalaCCodeFunction* _tmp265_;
26503 BalaCCodeFunction* _tmp266_;
26504 _tmp259_ = bala_ccode_base_module_get_ccode (self);
26505 _tmp260_ = _tmp259_;
26506 _tmp261_ = cnotnull;
26507 bala_ccode_function_open_if (_tmp260_, (BalaCCodeExpression*) _tmp261_);
26508 _tmp262_ = bala_ccode_base_module_get_ccode (self);
26509 _tmp263_ = _tmp262_;
26510 _tmp264_ = ccall;
26511 bala_ccode_function_add_expression (_tmp263_, (BalaCCodeExpression*) _tmp264_);
26512 _tmp265_ = bala_ccode_base_module_get_ccode (self);
26513 _tmp266_ = _tmp265_;
26514 bala_ccode_function_close (_tmp266_);
26515 } else {
26516 BalaGLibValue* _tmp277_;
26517 gboolean _tmp278_;
26518 BalaTargetValue* _tmp279_;
26519 if (bala_get_non_null (value)) {
26520 BalaGLibValue* _tmp267_;
26521 BalaCCodeFunctionCall* _tmp268_;
26522 BalaCCodeExpression* _tmp269_;
26523 _tmp267_ = _result_;
26524 _tmp268_ = ccall;
26525 _tmp269_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp268_);
26526 _bala_ccode_node_unref0 (_tmp267_->cvalue)((_tmp267_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp267_
->cvalue = (bala_ccode_node_unref (_tmp267_->cvalue), (
(void*)0))))
;
26527 _tmp267_->cvalue = _tmp269_;
26528 } else {
26529 BalaCCodeConditionalExpression* ccond = NULL((void*)0);
26530 BalaCCodeBinaryExpression* _tmp270_;
26531 BalaCCodeFunctionCall* _tmp271_;
26532 BalaCCodeExpression* _tmp272_;
26533 BalaCCodeConditionalExpression* _tmp273_;
26534 BalaGLibValue* _tmp274_;
26535 BalaCCodeConditionalExpression* _tmp275_;
26536 BalaCCodeExpression* _tmp276_;
26537 _tmp270_ = cnotnull;
26538 _tmp271_ = ccall;
26539 _tmp272_ = cifnull;
26540 _tmp273_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp270_, (BalaCCodeExpression*) _tmp271_, _tmp272_);
26541 ccond = _tmp273_;
26542 _tmp274_ = _result_;
26543 _tmp275_ = ccond;
26544 _tmp276_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp275_);
26545 _bala_ccode_node_unref0 (_tmp274_->cvalue)((_tmp274_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp274_
->cvalue = (bala_ccode_node_unref (_tmp274_->cvalue), (
(void*)0))))
;
26546 _tmp274_->cvalue = _tmp276_;
26547 _bala_ccode_node_unref0 (ccond)((ccond == ((void*)0)) ? ((void*)0) : (ccond = (bala_ccode_node_unref
(ccond), ((void*)0))))
;
26548 }
26549 _tmp277_ = _result_;
26550 _tmp278_ = TRUE(!(0));
26551 _tmp279_ = bala_ccode_base_module_store_temp_value (self, (BalaTargetValue*) _tmp277_, node, &_tmp278_);
26552 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
26553 _result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp279_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp279_), ((bala_glib_value_get_type ())))))
;
26554 }
26555 result = (BalaTargetValue*) _result_;
26556 _bala_ccode_node_unref0 (cifnull)((cifnull == ((void*)0)) ? ((void*)0) : (cifnull = (bala_ccode_node_unref
(cifnull), ((void*)0))))
;
26557 _bala_ccode_node_unref0 (cnotnull)((cnotnull == ((void*)0)) ? ((void*)0) : (cnotnull = (bala_ccode_node_unref
(cnotnull), ((void*)0))))
;
26558 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
26559 _bala_ccode_node_unref0 (dupexpr)((dupexpr == ((void*)0)) ? ((void*)0) : (dupexpr = (bala_ccode_node_unref
(dupexpr), ((void*)0))))
;
26560 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
26561 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
26562 return result;
26563 }
26564 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
26565 _bala_ccode_node_unref0 (dupexpr)((dupexpr == ((void*)0)) ? ((void*)0) : (dupexpr = (bala_ccode_node_unref
(dupexpr), ((void*)0))))
;
26566 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
26567 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
26568 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
26569}
26570
26571BalaTargetValue*
26572bala_ccode_base_module_copy_value (BalaCCodeBaseModule* self,
26573 BalaTargetValue* value,
26574 BalaCodeNode* node)
26575{
26576 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
26577 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->copy_value (self, value, node);
26578}
26579
26580static void
26581bala_ccode_base_module_real_generate_class_declaration (BalaCCodeBaseModule* self,
26582 BalaClass* cl,
26583 BalaCCodeFile* decl_space)
26584{
26585 gchar* _tmp0_;
26586 gchar* _tmp1_;
26587 gboolean _tmp2_;
26588 g_return_if_fail (cl != NULL)do { if ((cl != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cl != NULL");
return; } } while (0)
;
26589 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
26590 _tmp0_ = bala_get_ccode_name ((BalaCodeNode*) cl);
26591 _tmp1_ = _tmp0_;
26592 _tmp2_ = bala_ccode_base_module_add_symbol_declaration (self, decl_space, (BalaSymbol*) cl, _tmp1_);
26593 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
26594 if (_tmp2_) {
26595 return;
26596 }
26597}
26598
26599void
26600bala_ccode_base_module_generate_class_declaration (BalaCCodeBaseModule* self,
26601 BalaClass* cl,
26602 BalaCCodeFile* decl_space)
26603{
26604 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
26605 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_class_declaration (self, cl, decl_space);
26606}
26607
26608static void
26609bala_ccode_base_module_real_generate_interface_declaration (BalaCCodeBaseModule* self,
26610 BalaInterface* iface,
26611 BalaCCodeFile* decl_space)
26612{
26613 g_return_if_fail (iface != NULL)do { if ((iface != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "iface != NULL"
); return; } } while (0)
;
26614 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
26615}
26616
26617void
26618bala_ccode_base_module_generate_interface_declaration (BalaCCodeBaseModule* self,
26619 BalaInterface* iface,
26620 BalaCCodeFile* decl_space)
26621{
26622 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
26623 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_interface_declaration (self, iface, decl_space);
26624}
26625
26626static gboolean
26627bala_ccode_base_module_real_generate_method_declaration (BalaCCodeBaseModule* self,
26628 BalaMethod* m,
26629 BalaCCodeFile* decl_space)
26630{
26631 gboolean result = FALSE(0);
26632 g_return_val_if_fail (m != NULL, FALSE)do { if ((m != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "m != NULL"); return
((0)); } } while (0)
;
26633 g_return_val_if_fail (decl_space != NULL, FALSE)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return ((0)); } } while (0)
;
26634 result = FALSE(0);
26635 return result;
26636}
26637
26638gboolean
26639bala_ccode_base_module_generate_method_declaration (BalaCCodeBaseModule* self,
26640 BalaMethod* m,
26641 BalaCCodeFile* decl_space)
26642{
26643 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
26644 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_method_declaration (self, m, decl_space);
26645}
26646
26647static void
26648bala_ccode_base_module_real_generate_error_domain_declaration (BalaCCodeBaseModule* self,
26649 BalaErrorDomain* edomain,
26650 BalaCCodeFile* decl_space)
26651{
26652 g_return_if_fail (edomain != NULL)do { if ((edomain != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "edomain != NULL"
); return; } } while (0)
;
26653 g_return_if_fail (decl_space != NULL)do { if ((decl_space != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "decl_space != NULL"
); return; } } while (0)
;
26654}
26655
26656void
26657bala_ccode_base_module_generate_error_domain_declaration (BalaCCodeBaseModule* self,
26658 BalaErrorDomain* edomain,
26659 BalaCCodeFile* decl_space)
26660{
26661 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
26662 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_error_domain_declaration (self, edomain, decl_space);
26663}
26664
26665void
26666bala_ccode_base_module_add_generic_type_arguments (BalaCCodeBaseModule* self,
26667 BalaMap* arg_map,
26668 BalaList* type_args,
26669 BalaCodeNode* expr,
26670 gboolean is_chainup,
26671 BalaList* type_parameters)
26672{
26673 gint type_param_index = 0;
26674 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
26675 g_return_if_fail (arg_map != NULL)do { if ((arg_map != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "arg_map != NULL"
); return; } } while (0)
;
26676 g_return_if_fail (type_args != NULL)do { if ((type_args != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type_args != NULL"
); return; } } while (0)
;
26677 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
26678 type_param_index = 0;
26679 {
26680 BalaList* _type_arg_list = NULL((void*)0);
26681 BalaList* _tmp0_;
26682 gint _type_arg_size = 0;
26683 BalaList* _tmp1_;
26684 gint _tmp2_;
26685 gint _tmp3_;
26686 gint _type_arg_index = 0;
26687 _tmp0_ = _bala_iterable_ref0 (type_args);
26688 _type_arg_list = _tmp0_;
26689 _tmp1_ = _type_arg_list;
26690 _tmp2_ = bala_collection_get_size ((BalaCollection*) _tmp1_);
26691 _tmp3_ = _tmp2_;
26692 _type_arg_size = _tmp3_;
26693 _type_arg_index = -1;
26694 while (TRUE(!(0))) {
26695 gint _tmp4_;
26696 gint _tmp5_;
26697 BalaDataType* type_arg = NULL((void*)0);
26698 BalaList* _tmp6_;
26699 gpointer _tmp7_;
26700 BalaDataType* _tmp31_;
26701 BalaCCodeExpression* _tmp32_;
26702 BalaCCodeExpression* _tmp33_;
26703 BalaDataType* _tmp34_;
26704 gint _tmp53_;
26705 _type_arg_index = _type_arg_index + 1;
26706 _tmp4_ = _type_arg_index;
26707 _tmp5_ = _type_arg_size;
26708 if (!(_tmp4_ < _tmp5_)) {
26709 break;
26710 }
26711 _tmp6_ = _type_arg_list;
26712 _tmp7_ = bala_list_get (_tmp6_, _type_arg_index);
26713 type_arg = (BalaDataType*) _tmp7_;
26714 if (type_parameters != NULL((void*)0)) {
26715 gchar* type_param_name = NULL((void*)0);
26716 gpointer _tmp8_;
26717 BalaTypeParameter* _tmp9_;
26718 const gchar* _tmp10_;
26719 const gchar* _tmp11_;
26720 gchar* _tmp12_;
26721 gchar* _tmp13_;
26722 gchar* _tmp14_;
26723 gchar* _tmp15_;
26724 const gchar* _tmp16_;
26725 gchar* _tmp17_;
26726 gchar* _tmp18_;
26727 BalaCCodeConstant* _tmp19_;
26728 BalaCCodeConstant* _tmp20_;
26729 const gchar* _tmp21_;
26730 gchar* _tmp22_;
26731 gchar* _tmp23_;
26732 BalaCCodeConstant* _tmp24_;
26733 BalaCCodeConstant* _tmp25_;
26734 const gchar* _tmp26_;
26735 gchar* _tmp27_;
26736 gchar* _tmp28_;
26737 BalaCCodeConstant* _tmp29_;
26738 BalaCCodeConstant* _tmp30_;
26739 _tmp8_ = bala_list_get (type_parameters, type_param_index);
26740 _tmp9_ = (BalaTypeParameter*) _tmp8_;
26741 _tmp10_ = bala_symbol_get_name ((BalaSymbol*) _tmp9_);
26742 _tmp11_ = _tmp10_;
26743 _tmp12_ = g_ascii_strdown (_tmp11_, (gssize) -1);
26744 _tmp13_ = _tmp12_;
26745 _tmp14_ = string_replace (_tmp13_, "_", "-");
26746 _tmp15_ = _tmp14_;
26747 _g_free0 (_tmp13_)(_tmp13_ = (g_free (_tmp13_), ((void*)0)));
26748 _bala_code_node_unref0 (_tmp9_)((_tmp9_ == ((void*)0)) ? ((void*)0) : (_tmp9_ = (bala_code_node_unref
(_tmp9_), ((void*)0))))
;
26749 type_param_name = _tmp15_;
26750 _tmp16_ = type_param_name;
26751 _tmp17_ = g_strdup_printf ("\"%s-type\"", _tmp16_);
26752 _tmp18_ = _tmp17_;
26753 _tmp19_ = bala_ccode_constant_new (_tmp18_);
26754 _tmp20_ = _tmp19_;
26755 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.01, FALSE(0))), (BalaCCodeExpression*) _tmp20_);
26756 _bala_ccode_node_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_node_unref
(_tmp20_), ((void*)0))))
;
26757 _g_free0 (_tmp18_)(_tmp18_ = (g_free (_tmp18_), ((void*)0)));
26758 _tmp21_ = type_param_name;
26759 _tmp22_ = g_strdup_printf ("\"%s-dup-func\"", _tmp21_);
26760 _tmp23_ = _tmp22_;
26761 _tmp24_ = bala_ccode_constant_new (_tmp23_);
26762 _tmp25_ = _tmp24_;
26763 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.03, FALSE(0))), (BalaCCodeExpression*) _tmp25_);
26764 _bala_ccode_node_unref0 (_tmp25_)((_tmp25_ == ((void*)0)) ? ((void*)0) : (_tmp25_ = (bala_ccode_node_unref
(_tmp25_), ((void*)0))))
;
26765 _g_free0 (_tmp23_)(_tmp23_ = (g_free (_tmp23_), ((void*)0)));
26766 _tmp26_ = type_param_name;
26767 _tmp27_ = g_strdup_printf ("\"%s-destroy-func\"", _tmp26_);
26768 _tmp28_ = _tmp27_;
26769 _tmp29_ = bala_ccode_constant_new (_tmp28_);
26770 _tmp30_ = _tmp29_;
26771 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.05, FALSE(0))), (BalaCCodeExpression*) _tmp30_);
26772 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
26773 _g_free0 (_tmp28_)(_tmp28_ = (g_free (_tmp28_), ((void*)0)));
26774 _g_free0 (type_param_name)(type_param_name = (g_free (type_param_name), ((void*)0)));
26775 }
26776 _tmp31_ = type_arg;
26777 _tmp32_ = bala_ccode_base_module_get_type_id_expression (self, _tmp31_, is_chainup);
26778 _tmp33_ = _tmp32_;
26779 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.02, FALSE(0))), _tmp33_);
26780 _bala_ccode_node_unref0 (_tmp33_)((_tmp33_ == ((void*)0)) ? ((void*)0) : (_tmp33_ = (bala_ccode_node_unref
(_tmp33_), ((void*)0))))
;
26781 _tmp34_ = type_arg;
26782 if (bala_ccode_base_module_requires_copy (_tmp34_)) {
26783 BalaCCodeExpression* dup_func = NULL((void*)0);
26784 BalaDataType* _tmp35_;
26785 BalaDataType* _tmp36_;
26786 BalaSourceReference* _tmp37_;
26787 BalaSourceReference* _tmp38_;
26788 BalaCCodeExpression* _tmp39_;
26789 BalaCCodeExpression* _tmp40_;
26790 BalaCCodeExpression* _tmp41_;
26791 BalaCCodeCastExpression* _tmp42_;
26792 BalaCCodeCastExpression* _tmp43_;
26793 BalaDataType* _tmp44_;
26794 BalaCCodeExpression* _tmp45_;
26795 BalaCCodeExpression* _tmp46_;
26796 BalaCCodeCastExpression* _tmp47_;
26797 BalaCCodeCastExpression* _tmp48_;
26798 _tmp35_ = type_arg;
26799 _tmp36_ = type_arg;
26800 _tmp37_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp36_);
26801 _tmp38_ = _tmp37_;
26802 _tmp39_ = bala_ccode_base_module_get_dup_func_expression (self, _tmp35_, _tmp38_, is_chainup);
26803 dup_func = _tmp39_;
26804 _tmp40_ = dup_func;
26805 if (_tmp40_ == NULL((void*)0)) {
26806 bala_code_node_set_error (expr, TRUE(!(0)));
26807 _bala_ccode_node_unref0 (dup_func)((dup_func == ((void*)0)) ? ((void*)0) : (dup_func = (bala_ccode_node_unref
(dup_func), ((void*)0))))
;
26808 _bala_code_node_unref0 (type_arg)((type_arg == ((void*)0)) ? ((void*)0) : (type_arg = (bala_code_node_unref
(type_arg), ((void*)0))))
;
26809 _bala_iterable_unref0 (_type_arg_list)((_type_arg_list == ((void*)0)) ? ((void*)0) : (_type_arg_list
= (bala_iterable_unref (_type_arg_list), ((void*)0))))
;
26810 return;
26811 }
26812 _tmp41_ = dup_func;
26813 _tmp42_ = bala_ccode_cast_expression_new (_tmp41_, "GBoxedCopyFunc");
26814 _tmp43_ = _tmp42_;
26815 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.04, FALSE(0))), (BalaCCodeExpression*) _tmp43_);
26816 _bala_ccode_node_unref0 (_tmp43_)((_tmp43_ == ((void*)0)) ? ((void*)0) : (_tmp43_ = (bala_ccode_node_unref
(_tmp43_), ((void*)0))))
;
26817 _tmp44_ = type_arg;
26818 _tmp45_ = bala_ccode_base_module_get_destroy_func_expression (self, _tmp44_, is_chainup);
26819 _tmp46_ = _tmp45_;
26820 _tmp47_ = bala_ccode_cast_expression_new (_tmp46_, "GDestroyNotify");
26821 _tmp48_ = _tmp47_;
26822 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.06, FALSE(0))), (BalaCCodeExpression*) _tmp48_);
26823 _bala_ccode_node_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_ccode_node_unref
(_tmp48_), ((void*)0))))
;
26824 _bala_ccode_node_unref0 (_tmp46_)((_tmp46_ == ((void*)0)) ? ((void*)0) : (_tmp46_ = (bala_ccode_node_unref
(_tmp46_), ((void*)0))))
;
26825 _bala_ccode_node_unref0 (dup_func)((dup_func == ((void*)0)) ? ((void*)0) : (dup_func = (bala_ccode_node_unref
(dup_func), ((void*)0))))
;
26826 } else {
26827 BalaCCodeConstant* _tmp49_;
26828 BalaCCodeConstant* _tmp50_;
26829 BalaCCodeConstant* _tmp51_;
26830 BalaCCodeConstant* _tmp52_;
26831 _tmp49_ = bala_ccode_constant_new ("NULL");
26832 _tmp50_ = _tmp49_;
26833 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.04, FALSE(0))), (BalaCCodeExpression*) _tmp50_);
26834 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
26835 _tmp51_ = bala_ccode_constant_new ("NULL");
26836 _tmp52_ = _tmp51_;
26837 bala_map_set (arg_map, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (0.1 * type_param_index) + 0.06, FALSE(0))), (BalaCCodeExpression*) _tmp52_);
26838 _bala_ccode_node_unref0 (_tmp52_)((_tmp52_ == ((void*)0)) ? ((void*)0) : (_tmp52_ = (bala_ccode_node_unref
(_tmp52_), ((void*)0))))
;
26839 }
26840 _tmp53_ = type_param_index;
26841 type_param_index = _tmp53_ + 1;
26842 _bala_code_node_unref0 (type_arg)((type_arg == ((void*)0)) ? ((void*)0) : (type_arg = (bala_code_node_unref
(type_arg), ((void*)0))))
;
26843 }
26844 _bala_iterable_unref0 (_type_arg_list)((_type_arg_list == ((void*)0)) ? ((void*)0) : (_type_arg_list
= (bala_iterable_unref (_type_arg_list), ((void*)0))))
;
26845 }
26846}
26847
26848static gpointer
26849_bala_map_ref0 (gpointer self)
26850{
26851 return self ? bala_map_ref (self) : NULL((void*)0);
26852}
26853
26854static void
26855bala_ccode_base_module_real_visit_object_creation_expression (BalaCodeVisitor* base,
26856 BalaObjectCreationExpression* expr)
26857{
26858 BalaCCodeBaseModule * self;
26859 BalaCCodeExpression* instance = NULL((void*)0);
26860 BalaCCodeExpression* creation_expr = NULL((void*)0);
26861 BalaStruct* st = NULL((void*)0);
26862 BalaDataType* _tmp0_;
26863 BalaDataType* _tmp1_;
26864 BalaTypeSymbol* _tmp2_;
26865 BalaTypeSymbol* _tmp3_;
26866 gboolean _tmp4_ = FALSE(0);
26867 gboolean _tmp5_ = FALSE(0);
26868 BalaStruct* _tmp6_;
26869 BalaSymbol* _tmp134_;
26870 BalaSymbol* _tmp135_;
26871 BalaLocalVariable* local = NULL((void*)0);
26872 BalaCodeNode* _tmp645_;
26873 BalaCodeNode* _tmp646_;
26874 BalaLocalVariable* _tmp647_;
26875 gboolean _tmp648_ = FALSE(0);
26876 BalaLocalVariable* _tmp649_;
26877 BalaTargetValue* _tmp884_;
26878 BalaTargetValue* _tmp885_;
26879 self = (BalaCCodeBaseModule*) base;
26880 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
26881 instance = NULL((void*)0);
26882 creation_expr = NULL((void*)0);
26883 _tmp0_ = bala_object_creation_expression_get_type_reference (expr);
26884 _tmp1_ = _tmp0_;
26885 _tmp2_ = bala_data_type_get_type_symbol (_tmp1_);
26886 _tmp3_ = _tmp2_;
26887 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp3_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp3_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp3_) : NULL((void*)0);
26888 _tmp6_ = st;
26889 if (_tmp6_ != NULL((void*)0)) {
26890 gboolean _tmp7_ = FALSE(0);
26891 BalaStruct* _tmp8_;
26892 _tmp8_ = st;
26893 if (!bala_struct_is_simple_type (_tmp8_)) {
26894 _tmp7_ = TRUE(!(0));
26895 } else {
26896 BalaStruct* _tmp9_;
26897 gchar* _tmp10_;
26898 gchar* _tmp11_;
26899 _tmp9_ = st;
26900 _tmp10_ = bala_get_ccode_name ((BalaCodeNode*) _tmp9_);
26901 _tmp11_ = _tmp10_;
26902 _tmp7_ = g_strcmp0 (_tmp11_, "va_list") == 0;
26903 _g_free0 (_tmp11_)(_tmp11_ = (g_free (_tmp11_), ((void*)0)));
26904 }
26905 _tmp5_ = _tmp7_;
26906 } else {
26907 _tmp5_ = FALSE(0);
26908 }
26909 if (_tmp5_) {
26910 _tmp4_ = TRUE(!(0));
26911 } else {
26912 BalaList* _tmp12_;
26913 gint _tmp13_;
26914 gint _tmp14_;
26915 _tmp12_ = bala_object_creation_expression_get_object_initializer (expr);
26916 _tmp13_ = bala_collection_get_size ((BalaCollection*) _tmp12_);
26917 _tmp14_ = _tmp13_;
26918 _tmp4_ = _tmp14_ > 0;
26919 }
26920 if (_tmp4_) {
26921 BalaLocalVariable* local = NULL((void*)0);
26922 BalaCodeNode* _tmp15_;
26923 BalaCodeNode* _tmp16_;
26924 BalaLocalVariable* _tmp17_;
26925 BalaField* field = NULL((void*)0);
26926 BalaCodeNode* _tmp18_;
26927 BalaCodeNode* _tmp19_;
26928 BalaField* _tmp20_;
26929 BalaAssignment* a = NULL((void*)0);
26930 BalaCodeNode* _tmp21_;
26931 BalaCodeNode* _tmp22_;
26932 BalaAssignment* _tmp23_;
26933 gboolean _tmp24_ = FALSE(0);
26934 BalaLocalVariable* _tmp25_;
26935 _tmp15_ = bala_code_node_get_parent_node ((BalaCodeNode*) expr);
26936 _tmp16_ = _tmp15_;
26937 _tmp17_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp16_, BALA_TYPE_LOCAL_VARIABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp16_); GType __t = ((bala_local_variable_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaLocalVariable*) _tmp16_) : NULL((void*)0));
26938 local = _tmp17_;
26939 _tmp18_ = bala_code_node_get_parent_node ((BalaCodeNode*) expr);
26940 _tmp19_ = _tmp18_;
26941 _tmp20_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp19_, BALA_TYPE_FIELD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp19_); GType __t = ((bala_field_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaField*) _tmp19_) : NULL((void*)0));
26942 field = _tmp20_;
26943 _tmp21_ = bala_code_node_get_parent_node ((BalaCodeNode*) expr);
26944 _tmp22_ = _tmp21_;
26945 _tmp23_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp22_, BALA_TYPE_ASSIGNMENT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp22_); GType __t = ((bala_assignment_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaAssignment*) _tmp22_) : NULL((void*)0));
26946 a = _tmp23_;
26947 _tmp25_ = local;
26948 if (_tmp25_ != NULL((void*)0)) {
26949 BalaLocalVariable* _tmp26_;
26950 BalaLocalVariable* _tmp27_;
26951 BalaExpression* _tmp28_;
26952 BalaExpression* _tmp29_;
26953 _tmp26_ = local;
26954 _tmp27_ = local;
26955 _tmp28_ = bala_variable_get_initializer ((BalaVariable*) _tmp27_);
26956 _tmp29_ = _tmp28_;
26957 _tmp24_ = bala_ccode_base_module_is_simple_struct_creation (self, (BalaVariable*) _tmp26_, _tmp29_);
26958 } else {
26959 _tmp24_ = FALSE(0);
26960 }
26961 if (_tmp24_) {
26962 BalaLocalVariable* _tmp30_;
26963 BalaTargetValue* _tmp31_;
26964 BalaTargetValue* _tmp32_;
26965 BalaCCodeExpression* _tmp33_;
26966 BalaCCodeExpression* _tmp34_;
26967 _tmp30_ = local;
26968 _tmp31_ = bala_ccode_base_module_get_local_cvalue (self, _tmp30_);
26969 _tmp32_ = _tmp31_;
26970 _tmp33_ = bala_get_cvalue_ (_tmp32_);
26971 _tmp34_ = _bala_ccode_node_ref0 (_tmp33_);
26972 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
26973 instance = _tmp34_;
26974 _bala_target_value_unref0 (_tmp32_)((_tmp32_ == ((void*)0)) ? ((void*)0) : (_tmp32_ = (bala_target_value_unref
(_tmp32_), ((void*)0))))
;
26975 } else {
26976 gboolean _tmp35_ = FALSE(0);
26977 BalaField* _tmp36_;
26978 _tmp36_ = field;
26979 if (_tmp36_ != NULL((void*)0)) {
26980 BalaField* _tmp37_;
26981 BalaField* _tmp38_;
26982 BalaExpression* _tmp39_;
26983 BalaExpression* _tmp40_;
26984 _tmp37_ = field;
26985 _tmp38_ = field;
26986 _tmp39_ = bala_variable_get_initializer ((BalaVariable*) _tmp38_);
26987 _tmp40_ = _tmp39_;
26988 _tmp35_ = bala_ccode_base_module_is_simple_struct_creation (self, (BalaVariable*) _tmp37_, _tmp40_);
26989 } else {
26990 _tmp35_ = FALSE(0);
26991 }
26992 if (_tmp35_) {
26993 BalaTargetValue* thisparam = NULL((void*)0);
26994 BalaField* _tmp41_;
26995 BalaSymbol* _tmp42_;
26996 BalaSymbol* _tmp43_;
26997 BalaTargetValue* _tmp44_;
26998 BalaField* _tmp45_;
26999 BalaTargetValue* _tmp46_;
27000 BalaTargetValue* _tmp47_;
27001 BalaTargetValue* _tmp48_;
27002 BalaCCodeExpression* _tmp49_;
27003 BalaCCodeExpression* _tmp50_;
27004 _tmp41_ = field;
27005 _tmp42_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp41_);
27006 _tmp43_ = _tmp42_;
27007 _tmp44_ = bala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp43_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp43_), ((bala_typesymbol_get_type ())))))
);
27008 thisparam = _tmp44_;
27009 _tmp45_ = field;
27010 _tmp46_ = thisparam;
27011 _tmp47_ = bala_ccode_base_module_get_field_cvalue (self, _tmp45_, _tmp46_);
27012 _tmp48_ = _tmp47_;
27013 _tmp49_ = bala_get_cvalue_ (_tmp48_);
27014 _tmp50_ = _bala_ccode_node_ref0 (_tmp49_);
27015 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
27016 instance = _tmp50_;
27017 _bala_target_value_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_target_value_unref
(_tmp48_), ((void*)0))))
;
27018 _bala_target_value_unref0 (thisparam)((thisparam == ((void*)0)) ? ((void*)0) : (thisparam = (bala_target_value_unref
(thisparam), ((void*)0))))
;
27019 } else {
27020 gboolean _tmp51_ = FALSE(0);
27021 gboolean _tmp52_ = FALSE(0);
27022 BalaAssignment* _tmp53_;
27023 _tmp53_ = a;
27024 if (_tmp53_ != NULL((void*)0)) {
27025 BalaAssignment* _tmp54_;
27026 BalaExpression* _tmp55_;
27027 BalaExpression* _tmp56_;
27028 BalaSymbol* _tmp57_;
27029 BalaSymbol* _tmp58_;
27030 _tmp54_ = a;
27031 _tmp55_ = bala_assignment_get_left (_tmp54_);
27032 _tmp56_ = _tmp55_;
27033 _tmp57_ = bala_expression_get_symbol_reference (_tmp56_);
27034 _tmp58_ = _tmp57_;
27035 _tmp52_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp58_, BALA_TYPE_VARIABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp58_); GType __t = ((bala_variable_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
27036 } else {
27037 _tmp52_ = FALSE(0);
27038 }
27039 if (_tmp52_) {
27040 BalaAssignment* _tmp59_;
27041 BalaExpression* _tmp60_;
27042 BalaExpression* _tmp61_;
27043 BalaSymbol* _tmp62_;
27044 BalaSymbol* _tmp63_;
27045 BalaAssignment* _tmp64_;
27046 BalaExpression* _tmp65_;
27047 BalaExpression* _tmp66_;
27048 _tmp59_ = a;
27049 _tmp60_ = bala_assignment_get_left (_tmp59_);
27050 _tmp61_ = _tmp60_;
27051 _tmp62_ = bala_expression_get_symbol_reference (_tmp61_);
27052 _tmp63_ = _tmp62_;
27053 _tmp64_ = a;
27054 _tmp65_ = bala_assignment_get_right (_tmp64_);
27055 _tmp66_ = _tmp65_;
27056 _tmp51_ = bala_ccode_base_module_is_simple_struct_creation (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp63_, BALA_TYPE_VARIABLE, BalaVariable)(((BalaVariable*) g_type_check_instance_cast ((GTypeInstance*
) (_tmp63_), ((bala_variable_get_type ())))))
, _tmp66_);
27057 } else {
27058 _tmp51_ = FALSE(0);
27059 }
27060 if (_tmp51_) {
27061 BalaAssignment* _tmp67_;
27062 BalaExpression* _tmp68_;
27063 BalaExpression* _tmp69_;
27064 BalaDataType* _tmp70_;
27065 BalaDataType* _tmp71_;
27066 BalaAssignment* _tmp81_;
27067 BalaExpression* _tmp82_;
27068 BalaExpression* _tmp83_;
27069 BalaSymbol* _tmp84_;
27070 BalaSymbol* _tmp85_;
27071 BalaLocalVariable* _tmp86_;
27072 BalaAssignment* _tmp87_;
27073 BalaExpression* _tmp88_;
27074 BalaExpression* _tmp89_;
27075 BalaSymbol* _tmp90_;
27076 BalaSymbol* _tmp91_;
27077 BalaField* _tmp92_;
27078 BalaParameter* param = NULL((void*)0);
27079 BalaAssignment* _tmp93_;
27080 BalaExpression* _tmp94_;
27081 BalaExpression* _tmp95_;
27082 BalaSymbol* _tmp96_;
27083 BalaSymbol* _tmp97_;
27084 BalaParameter* _tmp98_;
27085 BalaLocalVariable* _tmp99_;
27086 _tmp67_ = a;
27087 _tmp68_ = bala_assignment_get_left (_tmp67_);
27088 _tmp69_ = _tmp68_;
27089 _tmp70_ = bala_expression_get_value_type (_tmp69_);
27090 _tmp71_ = _tmp70_;
27091 if (bala_ccode_base_module_requires_destroy (_tmp71_)) {
27092 BalaCCodeFunction* _tmp72_;
27093 BalaCCodeFunction* _tmp73_;
27094 BalaAssignment* _tmp74_;
27095 BalaExpression* _tmp75_;
27096 BalaExpression* _tmp76_;
27097 BalaTargetValue* _tmp77_;
27098 BalaTargetValue* _tmp78_;
27099 BalaCCodeExpression* _tmp79_;
27100 BalaCCodeExpression* _tmp80_;
27101 _tmp72_ = bala_ccode_base_module_get_ccode (self);
27102 _tmp73_ = _tmp72_;
27103 _tmp74_ = a;
27104 _tmp75_ = bala_assignment_get_left (_tmp74_);
27105 _tmp76_ = _tmp75_;
27106 _tmp77_ = bala_expression_get_target_value (_tmp76_);
27107 _tmp78_ = _tmp77_;
27108 _tmp79_ = bala_ccode_base_module_destroy_value (self, _tmp78_, FALSE(0));
27109 _tmp80_ = _tmp79_;
27110 bala_ccode_function_add_expression (_tmp73_, _tmp80_);
27111 _bala_ccode_node_unref0 (_tmp80_)((_tmp80_ == ((void*)0)) ? ((void*)0) : (_tmp80_ = (bala_ccode_node_unref
(_tmp80_), ((void*)0))))
;
27112 }
27113 _tmp81_ = a;
27114 _tmp82_ = bala_assignment_get_left (_tmp81_);
27115 _tmp83_ = _tmp82_;
27116 _tmp84_ = bala_expression_get_symbol_reference (_tmp83_);
27117 _tmp85_ = _tmp84_;
27118 _tmp86_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp85_, BALA_TYPE_LOCAL_VARIABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp85_); GType __t = ((bala_local_variable_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaLocalVariable*) _tmp85_) : NULL((void*)0));
27119 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
27120 local = _tmp86_;
27121 _tmp87_ = a;
27122 _tmp88_ = bala_assignment_get_left (_tmp87_);
27123 _tmp89_ = _tmp88_;
27124 _tmp90_ = bala_expression_get_symbol_reference (_tmp89_);
27125 _tmp91_ = _tmp90_;
27126 _tmp92_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, BALA_TYPE_FIELD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp91_); GType __t = ((bala_field_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaField*) _tmp91_) : NULL((void*)0));
27127 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
27128 field = _tmp92_;
27129 _tmp93_ = a;
27130 _tmp94_ = bala_assignment_get_left (_tmp93_);
27131 _tmp95_ = _tmp94_;
27132 _tmp96_ = bala_expression_get_symbol_reference (_tmp95_);
27133 _tmp97_ = _tmp96_;
27134 _tmp98_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp97_, BALA_TYPE_PARAMETER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp97_); GType __t = ((bala_parameter_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaParameter*) _tmp97_) : NULL((void*)0));
27135 param = _tmp98_;
27136 _tmp99_ = local;
27137 if (_tmp99_ != NULL((void*)0)) {
27138 BalaLocalVariable* _tmp100_;
27139 BalaTargetValue* _tmp101_;
27140 BalaTargetValue* _tmp102_;
27141 BalaCCodeExpression* _tmp103_;
27142 BalaCCodeExpression* _tmp104_;
27143 _tmp100_ = local;
27144 _tmp101_ = bala_ccode_base_module_get_local_cvalue (self, _tmp100_);
27145 _tmp102_ = _tmp101_;
27146 _tmp103_ = bala_get_cvalue_ (_tmp102_);
27147 _tmp104_ = _bala_ccode_node_ref0 (_tmp103_);
27148 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
27149 instance = _tmp104_;
27150 _bala_target_value_unref0 (_tmp102_)((_tmp102_ == ((void*)0)) ? ((void*)0) : (_tmp102_ = (bala_target_value_unref
(_tmp102_), ((void*)0))))
;
27151 } else {
27152 BalaField* _tmp105_;
27153 _tmp105_ = field;
27154 if (_tmp105_ != NULL((void*)0)) {
27155 BalaExpression* inner = NULL((void*)0);
27156 BalaAssignment* _tmp106_;
27157 BalaExpression* _tmp107_;
27158 BalaExpression* _tmp108_;
27159 BalaExpression* _tmp109_;
27160 BalaExpression* _tmp110_;
27161 BalaExpression* _tmp111_;
27162 BalaTargetValue* _tmp112_ = NULL((void*)0);
27163 BalaExpression* _tmp113_;
27164 BalaField* _tmp117_;
27165 BalaTargetValue* _tmp118_;
27166 BalaTargetValue* _tmp119_;
27167 BalaCCodeExpression* _tmp120_;
27168 BalaCCodeExpression* _tmp121_;
27169 _tmp106_ = a;
27170 _tmp107_ = bala_assignment_get_left (_tmp106_);
27171 _tmp108_ = _tmp107_;
27172 _tmp109_ = bala_member_access_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp108_, BALA_TYPE_MEMBER_ACCESS, BalaMemberAccess)(((BalaMemberAccess*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp108_), ((bala_member_access_get_type ())))))
);
27173 _tmp110_ = _tmp109_;
27174 _tmp111_ = _bala_code_node_ref0 (_tmp110_);
27175 inner = _tmp111_;
27176 _tmp113_ = inner;
27177 if (_tmp113_ != NULL((void*)0)) {
27178 BalaExpression* _tmp114_;
27179 BalaTargetValue* _tmp115_;
27180 BalaTargetValue* _tmp116_;
27181 _tmp114_ = inner;
27182 _tmp115_ = bala_expression_get_target_value (_tmp114_);
27183 _tmp116_ = _tmp115_;
27184 _tmp112_ = _tmp116_;
27185 } else {
27186 _tmp112_ = NULL((void*)0);
27187 }
27188 _tmp117_ = field;
27189 _tmp118_ = bala_ccode_base_module_get_field_cvalue (self, _tmp117_, _tmp112_);
27190 _tmp119_ = _tmp118_;
27191 _tmp120_ = bala_get_cvalue_ (_tmp119_);
27192 _tmp121_ = _bala_ccode_node_ref0 (_tmp120_);
27193 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
27194 instance = _tmp121_;
27195 _bala_target_value_unref0 (_tmp119_)((_tmp119_ == ((void*)0)) ? ((void*)0) : (_tmp119_ = (bala_target_value_unref
(_tmp119_), ((void*)0))))
;
27196 _bala_code_node_unref0 (inner)((inner == ((void*)0)) ? ((void*)0) : (inner = (bala_code_node_unref
(inner), ((void*)0))))
;
27197 } else {
27198 BalaParameter* _tmp122_;
27199 _tmp122_ = param;
27200 if (_tmp122_ != NULL((void*)0)) {
27201 BalaParameter* _tmp123_;
27202 BalaTargetValue* _tmp124_;
27203 BalaTargetValue* _tmp125_;
27204 BalaCCodeExpression* _tmp126_;
27205 BalaCCodeExpression* _tmp127_;
27206 _tmp123_ = param;
27207 _tmp124_ = bala_ccode_base_module_get_parameter_cvalue (self, _tmp123_);
27208 _tmp125_ = _tmp124_;
27209 _tmp126_ = bala_get_cvalue_ (_tmp125_);
27210 _tmp127_ = _bala_ccode_node_ref0 (_tmp126_);
27211 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
27212 instance = _tmp127_;
27213 _bala_target_value_unref0 (_tmp125_)((_tmp125_ == ((void*)0)) ? ((void*)0) : (_tmp125_ = (bala_target_value_unref
(_tmp125_), ((void*)0))))
;
27214 }
27215 }
27216 }
27217 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
27218 } else {
27219 BalaTargetValue* temp_value = NULL((void*)0);
27220 BalaDataType* _tmp128_;
27221 BalaDataType* _tmp129_;
27222 BalaTargetValue* _tmp130_;
27223 BalaTargetValue* _tmp131_;
27224 BalaCCodeExpression* _tmp132_;
27225 BalaCCodeExpression* _tmp133_;
27226 _tmp128_ = bala_object_creation_expression_get_type_reference (expr);
27227 _tmp129_ = _tmp128_;
27228 _tmp130_ = bala_ccode_base_module_create_temp_value (self, _tmp129_, TRUE(!(0)), (BalaCodeNode*) expr, NULL((void*)0));
27229 temp_value = _tmp130_;
27230 _tmp131_ = temp_value;
27231 _tmp132_ = bala_get_cvalue_ (_tmp131_);
27232 _tmp133_ = _bala_ccode_node_ref0 (_tmp132_);
27233 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
27234 instance = _tmp133_;
27235 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
27236 }
27237 }
27238 }
27239 _bala_code_node_unref0 (a)((a == ((void*)0)) ? ((void*)0) : (a = (bala_code_node_unref (
a), ((void*)0))))
;
27240 _bala_code_node_unref0 (field)((field == ((void*)0)) ? ((void*)0) : (field = (bala_code_node_unref
(field), ((void*)0))))
;
27241 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
27242 }
27243 _tmp134_ = bala_expression_get_symbol_reference ((BalaExpression*) expr);
27244 _tmp135_ = _tmp134_;
27245 if (_tmp135_ == NULL((void*)0)) {
27246 BalaDataType* _tmp136_;
27247 BalaDataType* _tmp137_;
27248 BalaTypeSymbol* _tmp138_;
27249 BalaTypeSymbol* _tmp139_;
27250 _tmp136_ = bala_object_creation_expression_get_type_reference (expr);
27251 _tmp137_ = _tmp136_;
27252 _tmp138_ = bala_data_type_get_type_symbol (_tmp137_);
27253 _tmp139_ = _tmp138_;
27254 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp139_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp139_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
27255 BalaCCodeFile* _tmp140_;
27256 BalaCCodeFunctionCall* creation_call = NULL((void*)0);
27257 BalaCCodeIdentifier* _tmp141_;
27258 BalaCCodeIdentifier* _tmp142_;
27259 BalaCCodeFunctionCall* _tmp143_;
27260 BalaCCodeFunctionCall* _tmp144_;
27261 BalaCCodeFunctionCall* _tmp145_;
27262 BalaCCodeExpression* _tmp146_;
27263 BalaCCodeUnaryExpression* _tmp147_;
27264 BalaCCodeUnaryExpression* _tmp148_;
27265 BalaCCodeFunctionCall* _tmp149_;
27266 BalaCCodeConstant* _tmp150_;
27267 BalaCCodeConstant* _tmp151_;
27268 BalaCCodeFunctionCall* _tmp152_;
27269 BalaDataType* _tmp153_;
27270 BalaDataType* _tmp154_;
27271 gchar* _tmp155_;
27272 gchar* _tmp156_;
27273 gchar* _tmp157_;
27274 gchar* _tmp158_;
27275 BalaCCodeIdentifier* _tmp159_;
27276 BalaCCodeIdentifier* _tmp160_;
27277 BalaCCodeFunctionCall* _tmp161_;
27278 BalaCCodeExpression* _tmp162_;
27279 _tmp140_ = self->cfile;
27280 bala_ccode_file_add_include (_tmp140_, "string.h", FALSE(0));
27281 _tmp141_ = bala_ccode_identifier_new ("memset");
27282 _tmp142_ = _tmp141_;
27283 _tmp143_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp142_);
27284 _tmp144_ = _tmp143_;
27285 _bala_ccode_node_unref0 (_tmp142_)((_tmp142_ == ((void*)0)) ? ((void*)0) : (_tmp142_ = (bala_ccode_node_unref
(_tmp142_), ((void*)0))))
;
27286 creation_call = _tmp144_;
27287 _tmp145_ = creation_call;
27288 _tmp146_ = instance;
27289 _tmp147_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp146_);
27290 _tmp148_ = _tmp147_;
27291 bala_ccode_function_call_add_argument (_tmp145_, (BalaCCodeExpression*) _tmp148_);
27292 _bala_ccode_node_unref0 (_tmp148_)((_tmp148_ == ((void*)0)) ? ((void*)0) : (_tmp148_ = (bala_ccode_node_unref
(_tmp148_), ((void*)0))))
;
27293 _tmp149_ = creation_call;
27294 _tmp150_ = bala_ccode_constant_new ("0");
27295 _tmp151_ = _tmp150_;
27296 bala_ccode_function_call_add_argument (_tmp149_, (BalaCCodeExpression*) _tmp151_);
27297 _bala_ccode_node_unref0 (_tmp151_)((_tmp151_ == ((void*)0)) ? ((void*)0) : (_tmp151_ = (bala_ccode_node_unref
(_tmp151_), ((void*)0))))
;
27298 _tmp152_ = creation_call;
27299 _tmp153_ = bala_object_creation_expression_get_type_reference (expr);
27300 _tmp154_ = _tmp153_;
27301 _tmp155_ = bala_get_ccode_name ((BalaCodeNode*) _tmp154_);
27302 _tmp156_ = _tmp155_;
27303 _tmp157_ = g_strdup_printf ("sizeof (%s)", _tmp156_);
27304 _tmp158_ = _tmp157_;
27305 _tmp159_ = bala_ccode_identifier_new (_tmp158_);
27306 _tmp160_ = _tmp159_;
27307 bala_ccode_function_call_add_argument (_tmp152_, (BalaCCodeExpression*) _tmp160_);
27308 _bala_ccode_node_unref0 (_tmp160_)((_tmp160_ == ((void*)0)) ? ((void*)0) : (_tmp160_ = (bala_ccode_node_unref
(_tmp160_), ((void*)0))))
;
27309 _g_free0 (_tmp158_)(_tmp158_ = (g_free (_tmp158_), ((void*)0)));
27310 _g_free0 (_tmp156_)(_tmp156_ = (g_free (_tmp156_), ((void*)0)));
27311 _tmp161_ = creation_call;
27312 _tmp162_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp161_);
27313 _bala_ccode_node_unref0 (creation_expr)((creation_expr == ((void*)0)) ? ((void*)0) : (creation_expr =
(bala_ccode_node_unref (creation_expr), ((void*)0))))
;
27314 creation_expr = _tmp162_;
27315 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
27316 }
27317 } else {
27318 gboolean _tmp163_ = FALSE(0);
27319 BalaDataType* _tmp164_;
27320 BalaDataType* _tmp165_;
27321 BalaTypeSymbol* _tmp166_;
27322 BalaTypeSymbol* _tmp167_;
27323 BalaClass* _tmp168_;
27324 _tmp164_ = bala_object_creation_expression_get_type_reference (expr);
27325 _tmp165_ = _tmp164_;
27326 _tmp166_ = bala_data_type_get_type_symbol (_tmp165_);
27327 _tmp167_ = _tmp166_;
27328 _tmp168_ = self->glist_type;
27329 if (_tmp167_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp168_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp168_), ((bala_typesymbol_get_type ())))))
) {
27330 _tmp163_ = TRUE(!(0));
27331 } else {
27332 BalaDataType* _tmp169_;
27333 BalaDataType* _tmp170_;
27334 BalaTypeSymbol* _tmp171_;
27335 BalaTypeSymbol* _tmp172_;
27336 BalaClass* _tmp173_;
27337 _tmp169_ = bala_object_creation_expression_get_type_reference (expr);
27338 _tmp170_ = _tmp169_;
27339 _tmp171_ = bala_data_type_get_type_symbol (_tmp170_);
27340 _tmp172_ = _tmp171_;
27341 _tmp173_ = self->gslist_type;
27342 _tmp163_ = _tmp172_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp173_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp173_), ((bala_typesymbol_get_type ())))))
;
27343 }
27344 if (_tmp163_) {
27345 BalaCCodeConstant* _tmp174_;
27346 BalaCCodeConstant* _tmp175_;
27347 _tmp174_ = bala_ccode_constant_new ("NULL");
27348 _tmp175_ = _tmp174_;
27349 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp175_);
27350 _bala_ccode_node_unref0 (_tmp175_)((_tmp175_ == ((void*)0)) ? ((void*)0) : (_tmp175_ = (bala_ccode_node_unref
(_tmp175_), ((void*)0))))
;
27351 } else {
27352 BalaSymbol* _tmp176_;
27353 BalaSymbol* _tmp177_;
27354 _tmp176_ = bala_expression_get_symbol_reference ((BalaExpression*) expr);
27355 _tmp177_ = _tmp176_;
27356 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp177_, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp177_); GType __t = ((bala_method_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
27357 BalaMethod* m = NULL((void*)0);
27358 BalaSymbol* _tmp178_;
27359 BalaSymbol* _tmp179_;
27360 BalaMethod* _tmp180_;
27361 BalaList* params = NULL((void*)0);
27362 BalaMethod* _tmp181_;
27363 BalaList* _tmp182_;
27364 BalaList* _tmp183_;
27365 BalaCCodeFunctionCall* creation_call = NULL((void*)0);
27366 BalaCCodeFunctionCall* async_call = NULL((void*)0);
27367 BalaCCodeFunctionCall* finish_call = NULL((void*)0);
27368 BalaMethod* _tmp184_;
27369 BalaCCodeFile* _tmp185_;
27370 BalaClass* cl = NULL((void*)0);
27371 BalaDataType* _tmp186_;
27372 BalaDataType* _tmp187_;
27373 BalaTypeSymbol* _tmp188_;
27374 BalaTypeSymbol* _tmp189_;
27375 BalaMethod* _tmp190_;
27376 gboolean _tmp209_ = FALSE(0);
27377 gboolean _tmp210_ = FALSE(0);
27378 BalaStruct* _tmp211_;
27379 BalaDataType* _tmp281_;
27380 BalaDataType* _tmp282_;
27381 BalaCCodeFile* _tmp283_;
27382 BalaHashMap* in_arg_map = NULL((void*)0);
27383 GHashFunc _tmp284_;
27384 GEqualFunc _tmp285_;
27385 GEqualFunc _tmp286_;
27386 BalaHashMap* _tmp287_;
27387 BalaHashMap* out_arg_map = NULL((void*)0);
27388 BalaHashMap* _tmp288_;
27389 BalaHashMap* _tmp289_;
27390 gboolean _tmp290_ = FALSE(0);
27391 BalaMethod* _tmp291_;
27392 gboolean _tmp319_ = FALSE(0);
27393 BalaClass* _tmp320_;
27394 gboolean ellipsis = FALSE(0);
27395 gint i = 0;
27396 gint arg_pos = 0;
27397 BalaIterator* params_it = NULL((void*)0);
27398 BalaList* _tmp351_;
27399 BalaIterator* _tmp352_;
27400 BalaIterator* _tmp450_;
27401 gboolean _tmp460_;
27402 gboolean _tmp461_;
27403 gboolean _tmp488_ = FALSE(0);
27404 gboolean _tmp489_ = FALSE(0);
27405 BalaStruct* _tmp490_;
27406 gboolean _tmp497_ = FALSE(0);
27407 BalaMethod* _tmp498_;
27408 gboolean _tmp514_ = FALSE(0);
27409 gboolean _tmp515_ = FALSE(0);
27410 BalaMethod* _tmp516_;
27411 gint last_pos = 0;
27412 gint min_pos = 0;
27413 BalaCCodeFunctionCall* _tmp531_;
27414 BalaCCodeFunctionCall* _tmp532_;
27415 BalaCCodeFunctionCall* _tmp547_;
27416 gboolean _tmp562_;
27417 gboolean _tmp563_;
27418 BalaCCodeFunctionCall* _tmp587_;
27419 BalaCCodeExpression* _tmp588_;
27420 BalaMethod* _tmp589_;
27421 gchar* _tmp590_;
27422 gchar* _tmp591_;
27423 gboolean _tmp592_;
27424 _tmp178_ = bala_expression_get_symbol_reference ((BalaExpression*) expr);
27425 _tmp179_ = _tmp178_;
27426 _tmp180_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp179_, BALA_TYPE_METHOD, BalaMethod)(((BalaMethod*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp179_), ((bala_method_get_type ())))))
);
27427 m = _tmp180_;
27428 _tmp181_ = m;
27429 _tmp182_ = bala_callable_get_parameters ((BalaCallable*) _tmp181_);
27430 _tmp183_ = _bala_iterable_ref0 (_tmp182_);
27431 params = _tmp183_;
27432 async_call = NULL((void*)0);
27433 finish_call = NULL((void*)0);
27434 _tmp184_ = m;
27435 _tmp185_ = self->cfile;
27436 bala_ccode_base_module_generate_method_declaration (self, _tmp184_, _tmp185_);
27437 _tmp186_ = bala_object_creation_expression_get_type_reference (expr);
27438 _tmp187_ = _tmp186_;
27439 _tmp188_ = bala_data_type_get_type_symbol (_tmp187_);
27440 _tmp189_ = _tmp188_;
27441 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp189_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp189_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp189_) : NULL((void*)0);
27442 _tmp190_ = m;
27443 if (!bala_get_ccode_has_new_function (_tmp190_)) {
27444 BalaMethod* _tmp191_;
27445 gchar* _tmp192_;
27446 gchar* _tmp193_;
27447 BalaCCodeIdentifier* _tmp194_;
27448 BalaCCodeIdentifier* _tmp195_;
27449 BalaCCodeFunctionCall* _tmp196_;
27450 BalaCCodeFunctionCall* _tmp197_;
27451 BalaClass* _tmp198_;
27452 gchar* _tmp199_;
27453 gchar* _tmp200_;
27454 BalaCCodeIdentifier* _tmp201_;
27455 BalaCCodeIdentifier* _tmp202_;
27456 _tmp191_ = m;
27457 _tmp192_ = bala_get_ccode_real_name ((BalaSymbol*) _tmp191_);
27458 _tmp193_ = _tmp192_;
27459 _tmp194_ = bala_ccode_identifier_new (_tmp193_);
27460 _tmp195_ = _tmp194_;
27461 _tmp196_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp195_);
27462 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
27463 creation_call = _tmp196_;
27464 _bala_ccode_node_unref0 (_tmp195_)((_tmp195_ == ((void*)0)) ? ((void*)0) : (_tmp195_ = (bala_ccode_node_unref
(_tmp195_), ((void*)0))))
;
27465 _g_free0 (_tmp193_)(_tmp193_ = (g_free (_tmp193_), ((void*)0)));
27466 _tmp197_ = creation_call;
27467 _tmp198_ = cl;
27468 _tmp199_ = bala_get_ccode_type_id ((BalaCodeNode*) _tmp198_);
27469 _tmp200_ = _tmp199_;
27470 _tmp201_ = bala_ccode_identifier_new (_tmp200_);
27471 _tmp202_ = _tmp201_;
27472 bala_ccode_function_call_add_argument (_tmp197_, (BalaCCodeExpression*) _tmp202_);
27473 _bala_ccode_node_unref0 (_tmp202_)((_tmp202_ == ((void*)0)) ? ((void*)0) : (_tmp202_ = (bala_ccode_node_unref
(_tmp202_), ((void*)0))))
;
27474 _g_free0 (_tmp200_)(_tmp200_ = (g_free (_tmp200_), ((void*)0)));
27475 } else {
27476 BalaMethod* _tmp203_;
27477 gchar* _tmp204_;
27478 gchar* _tmp205_;
27479 BalaCCodeIdentifier* _tmp206_;
27480 BalaCCodeIdentifier* _tmp207_;
27481 BalaCCodeFunctionCall* _tmp208_;
27482 _tmp203_ = m;
27483 _tmp204_ = bala_get_ccode_name ((BalaCodeNode*) _tmp203_);
27484 _tmp205_ = _tmp204_;
27485 _tmp206_ = bala_ccode_identifier_new (_tmp205_);
27486 _tmp207_ = _tmp206_;
27487 _tmp208_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp207_);
27488 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
27489 creation_call = _tmp208_;
27490 _bala_ccode_node_unref0 (_tmp207_)((_tmp207_ == ((void*)0)) ? ((void*)0) : (_tmp207_ = (bala_ccode_node_unref
(_tmp207_), ((void*)0))))
;
27491 _g_free0 (_tmp205_)(_tmp205_ = (g_free (_tmp205_), ((void*)0)));
27492 }
27493 _tmp211_ = st;
27494 if (_tmp211_ != NULL((void*)0)) {
27495 BalaStruct* _tmp212_;
27496 _tmp212_ = st;
27497 _tmp210_ = !bala_struct_is_simple_type (_tmp212_);
27498 } else {
27499 _tmp210_ = FALSE(0);
27500 }
27501 if (_tmp210_) {
27502 BalaMethod* _tmp213_;
27503 _tmp213_ = m;
27504 _tmp209_ = !(bala_get_ccode_instance_pos ((BalaCodeNode*) _tmp213_) < ((gdouble) 0));
27505 } else {
27506 _tmp209_ = FALSE(0);
27507 }
27508 if (_tmp209_) {
27509 BalaCCodeFunctionCall* _tmp214_;
27510 BalaCCodeExpression* _tmp215_;
27511 BalaCCodeUnaryExpression* _tmp216_;
27512 BalaCCodeUnaryExpression* _tmp217_;
27513 _tmp214_ = creation_call;
27514 _tmp215_ = instance;
27515 _tmp216_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp215_);
27516 _tmp217_ = _tmp216_;
27517 bala_ccode_function_call_add_argument (_tmp214_, (BalaCCodeExpression*) _tmp217_);
27518 _bala_ccode_node_unref0 (_tmp217_)((_tmp217_ == ((void*)0)) ? ((void*)0) : (_tmp217_ = (bala_ccode_node_unref
(_tmp217_), ((void*)0))))
;
27519 } else {
27520 gboolean _tmp218_ = FALSE(0);
27521 BalaStruct* _tmp219_;
27522 _tmp219_ = st;
27523 if (_tmp219_ != NULL((void*)0)) {
27524 BalaStruct* _tmp220_;
27525 gchar* _tmp221_;
27526 gchar* _tmp222_;
27527 _tmp220_ = st;
27528 _tmp221_ = bala_get_ccode_name ((BalaCodeNode*) _tmp220_);
27529 _tmp222_ = _tmp221_;
27530 _tmp218_ = g_strcmp0 (_tmp222_, "va_list") == 0;
27531 _g_free0 (_tmp222_)(_tmp222_ = (g_free (_tmp222_), ((void*)0)));
27532 } else {
27533 _tmp218_ = FALSE(0);
27534 }
27535 if (_tmp218_) {
27536 BalaCCodeFunctionCall* _tmp223_;
27537 BalaCCodeExpression* _tmp224_;
27538 BalaMethod* _tmp225_;
27539 gchar* _tmp226_;
27540 gchar* _tmp227_;
27541 gboolean _tmp228_;
27542 _tmp223_ = creation_call;
27543 _tmp224_ = instance;
27544 bala_ccode_function_call_add_argument (_tmp223_, _tmp224_);
27545 _tmp225_ = m;
27546 _tmp226_ = bala_get_ccode_name ((BalaCodeNode*) _tmp225_);
27547 _tmp227_ = _tmp226_;
27548 _tmp228_ = g_strcmp0 (_tmp227_, "va_start") == 0;
27549 _g_free0 (_tmp227_)(_tmp227_ = (g_free (_tmp227_), ((void*)0)));
27550 if (_tmp228_) {
27551 gboolean _tmp229_;
27552 gboolean _tmp230_;
27553 _tmp229_ = bala_ccode_base_module_get_in_creation_method (self);
27554 _tmp230_ = _tmp229_;
27555 if (_tmp230_) {
27556 BalaCCodeIdentifier* _tmp231_;
27557 BalaCCodeIdentifier* _tmp232_;
27558 BalaCCodeFunctionCall* _tmp233_;
27559 BalaCCodeFunctionCall* _tmp234_;
27560 BalaCCodeExpression* _tmp235_;
27561 BalaCCodeFunctionCall* _tmp236_;
27562 BalaCCodeIdentifier* _tmp237_;
27563 BalaCCodeIdentifier* _tmp238_;
27564 _tmp231_ = bala_ccode_identifier_new ("va_copy");
27565 _tmp232_ = _tmp231_;
27566 _tmp233_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp232_);
27567 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
27568 creation_call = _tmp233_;
27569 _bala_ccode_node_unref0 (_tmp232_)((_tmp232_ == ((void*)0)) ? ((void*)0) : (_tmp232_ = (bala_ccode_node_unref
(_tmp232_), ((void*)0))))
;
27570 _tmp234_ = creation_call;
27571 _tmp235_ = instance;
27572 bala_ccode_function_call_add_argument (_tmp234_, _tmp235_);
27573 _tmp236_ = creation_call;
27574 _tmp237_ = bala_ccode_identifier_new ("_bala_va_list");
27575 _tmp238_ = _tmp237_;
27576 bala_ccode_function_call_add_argument (_tmp236_, (BalaCCodeExpression*) _tmp238_);
27577 _bala_ccode_node_unref0 (_tmp238_)((_tmp238_ == ((void*)0)) ? ((void*)0) : (_tmp238_ = (bala_ccode_node_unref
(_tmp238_), ((void*)0))))
;
27578 } else {
27579 BalaParameter* last_param = NULL((void*)0);
27580 gint nParams = 0;
27581 BalaCCodeFunction* _tmp259_;
27582 BalaCCodeFunction* _tmp260_;
27583 gboolean _tmp261_ = FALSE(0);
27584 last_param = NULL((void*)0);
27585 {
27586 BalaList* _param_list = NULL((void*)0);
27587 BalaMethod* _tmp239_;
27588 BalaMethod* _tmp240_;
27589 BalaList* _tmp241_;
27590 BalaList* _tmp242_;
27591 gint _param_size = 0;
27592 BalaList* _tmp243_;
27593 gint _tmp244_;
27594 gint _tmp245_;
27595 gint _param_index = 0;
27596 _tmp239_ = bala_ccode_base_module_get_current_method (self);
27597 _tmp240_ = _tmp239_;
27598 _tmp241_ = bala_callable_get_parameters ((BalaCallable*) _tmp240_);
27599 _tmp242_ = _bala_iterable_ref0 (_tmp241_);
27600 _param_list = _tmp242_;
27601 _tmp243_ = _param_list;
27602 _tmp244_ = bala_collection_get_size ((BalaCollection*) _tmp243_);
27603 _tmp245_ = _tmp244_;
27604 _param_size = _tmp245_;
27605 _param_index = -1;
27606 while (TRUE(!(0))) {
27607 gint _tmp246_;
27608 gint _tmp247_;
27609 BalaParameter* param = NULL((void*)0);
27610 BalaList* _tmp248_;
27611 gpointer _tmp249_;
27612 gboolean _tmp250_ = FALSE(0);
27613 BalaParameter* _tmp251_;
27614 gboolean _tmp252_;
27615 gboolean _tmp253_;
27616 BalaParameter* _tmp257_;
27617 BalaParameter* _tmp258_;
27618 _param_index = _param_index + 1;
27619 _tmp246_ = _param_index;
27620 _tmp247_ = _param_size;
27621 if (!(_tmp246_ < _tmp247_)) {
27622 break;
27623 }
27624 _tmp248_ = _param_list;
27625 _tmp249_ = bala_list_get (_tmp248_, _param_index);
27626 param = (BalaParameter*) _tmp249_;
27627 _tmp251_ = param;
27628 _tmp252_ = bala_parameter_get_ellipsis (_tmp251_);
27629 _tmp253_ = _tmp252_;
27630 if (_tmp253_) {
27631 _tmp250_ = TRUE(!(0));
27632 } else {
27633 BalaParameter* _tmp254_;
27634 gboolean _tmp255_;
27635 gboolean _tmp256_;
27636 _tmp254_ = param;
27637 _tmp255_ = bala_parameter_get_params_array (_tmp254_);
27638 _tmp256_ = _tmp255_;
27639 _tmp250_ = _tmp256_;
27640 }
27641 if (_tmp250_) {
27642 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
27643 break;
27644 }
27645 _tmp257_ = param;
27646 _tmp258_ = _bala_code_node_ref0 (_tmp257_);
27647 _bala_code_node_unref0 (last_param)((last_param == ((void*)0)) ? ((void*)0) : (last_param = (bala_code_node_unref
(last_param), ((void*)0))))
;
27648 last_param = _tmp258_;
27649 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
27650 }
27651 _bala_iterable_unref0 (_param_list)((_param_list == ((void*)0)) ? ((void*)0) : (_param_list = (bala_iterable_unref
(_param_list), ((void*)0))))
;
27652 }
27653 _tmp259_ = bala_ccode_base_module_get_ccode (self);
27654 _tmp260_ = _tmp259_;
27655 nParams = bala_ccode_function_get_parameter_count (_tmp260_);
27656 if (nParams == 0) {
27657 _tmp261_ = TRUE(!(0));
27658 } else {
27659 BalaCCodeFunction* _tmp262_;
27660 BalaCCodeFunction* _tmp263_;
27661 BalaCCodeParameter* _tmp264_;
27662 BalaCCodeParameter* _tmp265_;
27663 gboolean _tmp266_;
27664 gboolean _tmp267_;
27665 _tmp262_ = bala_ccode_base_module_get_ccode (self);
27666 _tmp263_ = _tmp262_;
27667 _tmp264_ = bala_ccode_function_get_parameter (_tmp263_, nParams - 1);
27668 _tmp265_ = _tmp264_;
27669 _tmp266_ = bala_ccode_parameter_get_ellipsis (_tmp265_);
27670 _tmp267_ = _tmp266_;
27671 _tmp261_ = !_tmp267_;
27672 _bala_ccode_node_unref0 (_tmp265_)((_tmp265_ == ((void*)0)) ? ((void*)0) : (_tmp265_ = (bala_ccode_node_unref
(_tmp265_), ((void*)0))))
;
27673 }
27674 if (_tmp261_) {
27675 BalaSourceReference* _tmp268_;
27676 BalaSourceReference* _tmp269_;
27677 _tmp268_ = bala_code_node_get_source_reference ((BalaCodeNode*) expr);
27678 _tmp269_ = _tmp268_;
27679 bala_report_error (_tmp269_, "`va_list' used in method with fixed args");
27680 } else {
27681 if (nParams == 1) {
27682 BalaSourceReference* _tmp270_;
27683 BalaSourceReference* _tmp271_;
27684 _tmp270_ = bala_code_node_get_source_reference ((BalaCodeNode*) expr);
27685 _tmp271_ = _tmp270_;
27686 bala_report_error (_tmp271_, "`va_list' used in method without parameter");
27687 } else {
27688 BalaCCodeFunctionCall* _tmp272_;
27689 BalaCCodeFunction* _tmp273_;
27690 BalaCCodeFunction* _tmp274_;
27691 BalaCCodeParameter* _tmp275_;
27692 BalaCCodeParameter* _tmp276_;
27693 const gchar* _tmp277_;
27694 const gchar* _tmp278_;
27695 BalaCCodeIdentifier* _tmp279_;
27696 BalaCCodeIdentifier* _tmp280_;
27697 _tmp272_ = creation_call;
27698 _tmp273_ = bala_ccode_base_module_get_ccode (self);
27699 _tmp274_ = _tmp273_;
27700 _tmp275_ = bala_ccode_function_get_parameter (_tmp274_, nParams - 2);
27701 _tmp276_ = _tmp275_;
27702 _tmp277_ = bala_ccode_parameter_get_name (_tmp276_);
27703 _tmp278_ = _tmp277_;
27704 _tmp279_ = bala_ccode_identifier_new (_tmp278_);
27705 _tmp280_ = _tmp279_;
27706 bala_ccode_function_call_add_argument (_tmp272_, (BalaCCodeExpression*) _tmp280_);
27707 _bala_ccode_node_unref0 (_tmp280_)((_tmp280_ == ((void*)0)) ? ((void*)0) : (_tmp280_ = (bala_ccode_node_unref
(_tmp280_), ((void*)0))))
;
27708 _bala_ccode_node_unref0 (_tmp276_)((_tmp276_ == ((void*)0)) ? ((void*)0) : (_tmp276_ = (bala_ccode_node_unref
(_tmp276_), ((void*)0))))
;
27709 }
27710 }
27711 _bala_code_node_unref0 (last_param)((last_param == ((void*)0)) ? ((void*)0) : (last_param = (bala_code_node_unref
(last_param), ((void*)0))))
;
27712 }
27713 }
27714 }
27715 }
27716 _tmp281_ = bala_object_creation_expression_get_type_reference (expr);
27717 _tmp282_ = _tmp281_;
27718 _tmp283_ = self->cfile;
27719 bala_ccode_base_module_generate_type_declaration (self, _tmp282_, _tmp283_);
27720 _tmp284_ = g_direct_hash;
27721 _tmp285_ = g_direct_equal;
27722 _tmp286_ = g_direct_equal;
27723 _tmp287_ = bala_hash_map_new (G_TYPE_INT((GType) ((6) << (2))), NULL((void*)0), NULL((void*)0), BALA_TYPE_CCODE_EXPRESSION(bala_ccode_expression_get_type ()), (GBoxedCopyFunc) bala_ccode_node_ref, (GDestroyNotify) bala_ccode_node_unref, _tmp284_, _tmp285_, _tmp286_);
27724 in_arg_map = _tmp287_;
27725 _tmp288_ = in_arg_map;
27726 _tmp289_ = _bala_map_ref0 (_tmp288_);
27727 out_arg_map = _tmp289_;
27728 _tmp291_ = m;
27729 if (_tmp291_ != NULL((void*)0)) {
27730 BalaMethod* _tmp292_;
27731 gboolean _tmp293_;
27732 gboolean _tmp294_;
27733 _tmp292_ = m;
27734 _tmp293_ = bala_method_get_coroutine (_tmp292_);
27735 _tmp294_ = _tmp293_;
27736 _tmp290_ = _tmp294_;
27737 } else {
27738 _tmp290_ = FALSE(0);
27739 }
27740 if (_tmp290_) {
27741 BalaMethod* _tmp295_;
27742 gchar* _tmp296_;
27743 gchar* _tmp297_;
27744 BalaCCodeIdentifier* _tmp298_;
27745 BalaCCodeIdentifier* _tmp299_;
27746 BalaCCodeFunctionCall* _tmp300_;
27747 BalaMethod* _tmp301_;
27748 gchar* _tmp302_;
27749 gchar* _tmp303_;
27750 BalaCCodeIdentifier* _tmp304_;
27751 BalaCCodeIdentifier* _tmp305_;
27752 BalaCCodeFunctionCall* _tmp306_;
27753 BalaCCodeFunctionCall* _tmp307_;
27754 BalaCCodeFunctionCall* _tmp308_;
27755 GHashFunc _tmp309_;
27756 GEqualFunc _tmp310_;
27757 GEqualFunc _tmp311_;
27758 BalaHashMap* _tmp312_;
27759 BalaHashMap* _tmp313_;
27760 BalaMethod* _tmp314_;
27761 BalaCCodeIdentifier* _tmp315_;
27762 BalaCCodeIdentifier* _tmp316_;
27763 BalaCCodeMemberAccess* _tmp317_;
27764 BalaCCodeMemberAccess* _tmp318_;
27765 _tmp295_ = m;
27766 _tmp296_ = bala_get_ccode_name ((BalaCodeNode*) _tmp295_);
27767 _tmp297_ = _tmp296_;
27768 _tmp298_ = bala_ccode_identifier_new (_tmp297_);
27769 _tmp299_ = _tmp298_;
27770 _tmp300_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp299_);
27771 _bala_ccode_node_unref0 (async_call)((async_call == ((void*)0)) ? ((void*)0) : (async_call = (bala_ccode_node_unref
(async_call), ((void*)0))))
;
27772 async_call = _tmp300_;
27773 _bala_ccode_node_unref0 (_tmp299_)((_tmp299_ == ((void*)0)) ? ((void*)0) : (_tmp299_ = (bala_ccode_node_unref
(_tmp299_), ((void*)0))))
;
27774 _g_free0 (_tmp297_)(_tmp297_ = (g_free (_tmp297_), ((void*)0)));
27775 _tmp301_ = m;
27776 _tmp302_ = bala_get_ccode_finish_name (_tmp301_);
27777 _tmp303_ = _tmp302_;
27778 _tmp304_ = bala_ccode_identifier_new (_tmp303_);
27779 _tmp305_ = _tmp304_;
27780 _tmp306_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp305_);
27781 _bala_ccode_node_unref0 (finish_call)((finish_call == ((void*)0)) ? ((void*)0) : (finish_call = (bala_ccode_node_unref
(finish_call), ((void*)0))))
;
27782 finish_call = _tmp306_;
27783 _bala_ccode_node_unref0 (_tmp305_)((_tmp305_ == ((void*)0)) ? ((void*)0) : (_tmp305_ = (bala_ccode_node_unref
(_tmp305_), ((void*)0))))
;
27784 _g_free0 (_tmp303_)(_tmp303_ = (g_free (_tmp303_), ((void*)0)));
27785 _tmp307_ = finish_call;
27786 _tmp308_ = _bala_ccode_node_ref0 (_tmp307_);
27787 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
27788 creation_call = _tmp308_;
27789 _tmp309_ = g_direct_hash;
27790 _tmp310_ = g_direct_equal;
27791 _tmp311_ = g_direct_equal;
27792 _tmp312_ = bala_hash_map_new (G_TYPE_INT((GType) ((6) << (2))), NULL((void*)0), NULL((void*)0), BALA_TYPE_CCODE_EXPRESSION(bala_ccode_expression_get_type ()), (GBoxedCopyFunc) bala_ccode_node_ref, (GDestroyNotify) bala_ccode_node_unref, _tmp309_, _tmp310_, _tmp311_);
27793 _bala_map_unref0 (out_arg_map)((out_arg_map == ((void*)0)) ? ((void*)0) : (out_arg_map = (bala_map_unref
(out_arg_map), ((void*)0))))
;
27794 out_arg_map = _tmp312_;
27795 _tmp313_ = out_arg_map;
27796 _tmp314_ = m;
27797 _tmp315_ = bala_ccode_identifier_new ("_data_");
27798 _tmp316_ = _tmp315_;
27799 _tmp317_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp316_, "_res_");
27800 _tmp318_ = _tmp317_;
27801 bala_map_set ((BalaMap*) _tmp313_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, bala_get_ccode_async_result_pos (_tmp314_), FALSE(0))), (BalaCCodeExpression*) _tmp318_);
27802 _bala_ccode_node_unref0 (_tmp318_)((_tmp318_ == ((void*)0)) ? ((void*)0) : (_tmp318_ = (bala_ccode_node_unref
(_tmp318_), ((void*)0))))
;
27803 _bala_ccode_node_unref0 (_tmp316_)((_tmp316_ == ((void*)0)) ? ((void*)0) : (_tmp316_ = (bala_ccode_node_unref
(_tmp316_), ((void*)0))))
;
27804 }
27805 _tmp320_ = cl;
27806 if (_tmp320_ != NULL((void*)0)) {
27807 BalaClass* _tmp321_;
27808 gboolean _tmp322_;
27809 gboolean _tmp323_;
27810 _tmp321_ = cl;
27811 _tmp322_ = bala_class_get_is_compact (_tmp321_);
27812 _tmp323_ = _tmp322_;
27813 _tmp319_ = !_tmp323_;
27814 } else {
27815 _tmp319_ = FALSE(0);
27816 }
27817 if (_tmp319_) {
27818 BalaHashMap* _tmp324_;
27819 BalaDataType* _tmp325_;
27820 BalaDataType* _tmp326_;
27821 BalaList* _tmp327_;
27822 _tmp324_ = in_arg_map;
27823 _tmp325_ = bala_object_creation_expression_get_type_reference (expr);
27824 _tmp326_ = _tmp325_;
27825 _tmp327_ = bala_data_type_get_type_arguments (_tmp326_);
27826 bala_ccode_base_module_add_generic_type_arguments (self, (BalaMap*) _tmp324_, _tmp327_, (BalaCodeNode*) expr, FALSE(0), NULL((void*)0));
27827 } else {
27828 gboolean _tmp328_ = FALSE(0);
27829 BalaClass* _tmp329_;
27830 _tmp329_ = cl;
27831 if (_tmp329_ != NULL((void*)0)) {
27832 BalaMethod* _tmp330_;
27833 _tmp330_ = m;
27834 _tmp328_ = bala_get_ccode_simple_generics (_tmp330_);
27835 } else {
27836 _tmp328_ = FALSE(0);
27837 }
27838 if (_tmp328_) {
27839 gint type_param_index = 0;
27840 type_param_index = 0;
27841 {
27842 BalaList* _type_arg_list = NULL((void*)0);
27843 BalaDataType* _tmp331_;
27844 BalaDataType* _tmp332_;
27845 BalaList* _tmp333_;
27846 BalaList* _tmp334_;
27847 gint _type_arg_size = 0;
27848 BalaList* _tmp335_;
27849 gint _tmp336_;
27850 gint _tmp337_;
27851 gint _type_arg_index = 0;
27852 _tmp331_ = bala_object_creation_expression_get_type_reference (expr);
27853 _tmp332_ = _tmp331_;
27854 _tmp333_ = bala_data_type_get_type_arguments (_tmp332_);
27855 _tmp334_ = _bala_iterable_ref0 (_tmp333_);
27856 _type_arg_list = _tmp334_;
27857 _tmp335_ = _type_arg_list;
27858 _tmp336_ = bala_collection_get_size ((BalaCollection*) _tmp335_);
27859 _tmp337_ = _tmp336_;
27860 _type_arg_size = _tmp337_;
27861 _type_arg_index = -1;
27862 while (TRUE(!(0))) {
27863 gint _tmp338_;
27864 gint _tmp339_;
27865 BalaDataType* type_arg = NULL((void*)0);
27866 BalaList* _tmp340_;
27867 gpointer _tmp341_;
27868 BalaDataType* _tmp342_;
27869 gint _tmp350_;
27870 _type_arg_index = _type_arg_index + 1;
27871 _tmp338_ = _type_arg_index;
27872 _tmp339_ = _type_arg_size;
27873 if (!(_tmp338_ < _tmp339_)) {
27874 break;
27875 }
27876 _tmp340_ = _type_arg_list;
27877 _tmp341_ = bala_list_get (_tmp340_, _type_arg_index);
27878 type_arg = (BalaDataType*) _tmp341_;
27879 _tmp342_ = type_arg;
27880 if (bala_ccode_base_module_requires_copy (_tmp342_)) {
27881 BalaHashMap* _tmp343_;
27882 BalaDataType* _tmp344_;
27883 BalaCCodeExpression* _tmp345_;
27884 BalaCCodeExpression* _tmp346_;
27885 _tmp343_ = in_arg_map;
27886 _tmp344_ = type_arg;
27887 _tmp345_ = bala_ccode_base_module_get_destroy0_func_expression (self, _tmp344_, FALSE(0));
27888 _tmp346_ = _tmp345_;
27889 bala_map_set ((BalaMap*) _tmp343_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (-1 + (0.1 * type_param_index)) + 0.03, FALSE(0))), _tmp346_);
27890 _bala_ccode_node_unref0 (_tmp346_)((_tmp346_ == ((void*)0)) ? ((void*)0) : (_tmp346_ = (bala_ccode_node_unref
(_tmp346_), ((void*)0))))
;
27891 } else {
27892 BalaHashMap* _tmp347_;
27893 BalaCCodeConstant* _tmp348_;
27894 BalaCCodeConstant* _tmp349_;
27895 _tmp347_ = in_arg_map;
27896 _tmp348_ = bala_ccode_constant_new ("NULL");
27897 _tmp349_ = _tmp348_;
27898 bala_map_set ((BalaMap*) _tmp347_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (-1 + (0.1 * type_param_index)) + 0.03, FALSE(0))), (BalaCCodeExpression*) _tmp349_);
27899 _bala_ccode_node_unref0 (_tmp349_)((_tmp349_ == ((void*)0)) ? ((void*)0) : (_tmp349_ = (bala_ccode_node_unref
(_tmp349_), ((void*)0))))
;
27900 }
27901 _tmp350_ = type_param_index;
27902 type_param_index = _tmp350_ + 1;
27903 _bala_code_node_unref0 (type_arg)((type_arg == ((void*)0)) ? ((void*)0) : (type_arg = (bala_code_node_unref
(type_arg), ((void*)0))))
;
27904 }
27905 _bala_iterable_unref0 (_type_arg_list)((_type_arg_list == ((void*)0)) ? ((void*)0) : (_type_arg_list
= (bala_iterable_unref (_type_arg_list), ((void*)0))))
;
27906 }
27907 }
27908 }
27909 ellipsis = FALSE(0);
27910 i = 1;
27911 _tmp351_ = params;
27912 _tmp352_ = bala_iterable_iterator ((BalaIterable*) _tmp351_);
27913 params_it = _tmp352_;
27914 {
27915 BalaList* _arg_list = NULL((void*)0);
27916 BalaList* _tmp353_;
27917 BalaList* _tmp354_;
27918 gint _arg_size = 0;
27919 BalaList* _tmp355_;
27920 gint _tmp356_;
27921 gint _tmp357_;
27922 gint _arg_index = 0;
27923 _tmp353_ = bala_object_creation_expression_get_argument_list (expr);
27924 _tmp354_ = _bala_iterable_ref0 (_tmp353_);
27925 _arg_list = _tmp354_;
27926 _tmp355_ = _arg_list;
27927 _tmp356_ = bala_collection_get_size ((BalaCollection*) _tmp355_);
27928 _tmp357_ = _tmp356_;
27929 _arg_size = _tmp357_;
27930 _arg_index = -1;
27931 while (TRUE(!(0))) {
27932 gint _tmp358_;
27933 gint _tmp359_;
27934 BalaExpression* arg = NULL((void*)0);
27935 BalaList* _tmp360_;
27936 gpointer _tmp361_;
27937 BalaCCodeExpression* cexpr = NULL((void*)0);
27938 BalaExpression* _tmp362_;
27939 BalaCCodeExpression* _tmp363_;
27940 BalaCCodeExpression* _tmp364_;
27941 BalaHashMap* carg_map = NULL((void*)0);
27942 BalaHashMap* _tmp365_;
27943 BalaHashMap* _tmp366_;
27944 BalaParameter* param = NULL((void*)0);
27945 BalaIterator* _tmp367_;
27946 BalaHashMap* _tmp447_;
27947 BalaCCodeExpression* _tmp448_;
27948 gint _tmp449_;
27949 _arg_index = _arg_index + 1;
27950 _tmp358_ = _arg_index;
27951 _tmp359_ = _arg_size;
27952 if (!(_tmp358_ < _tmp359_)) {
27953 break;
27954 }
27955 _tmp360_ = _arg_list;
27956 _tmp361_ = bala_list_get (_tmp360_, _arg_index);
27957 arg = (BalaExpression*) _tmp361_;
27958 _tmp362_ = arg;
27959 _tmp363_ = bala_get_cvalue (_tmp362_);
27960 _tmp364_ = _bala_ccode_node_ref0 (_tmp363_);
27961 cexpr = _tmp364_;
27962 _tmp365_ = in_arg_map;
27963 _tmp366_ = _bala_map_ref0 (_tmp365_);
27964 carg_map = _tmp366_;
27965 param = NULL((void*)0);
27966 _tmp367_ = params_it;
27967 if (bala_iterator_next (_tmp367_)) {
27968 BalaIterator* _tmp368_;
27969 gpointer _tmp369_;
27970 gboolean _tmp370_ = FALSE(0);
27971 BalaParameter* _tmp371_;
27972 gboolean _tmp372_;
27973 gboolean _tmp373_;
27974 BalaParameter* _tmp443_;
27975 _tmp368_ = params_it;
27976 _tmp369_ = bala_iterator_get (_tmp368_);
27977 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
27978 param = (BalaParameter*) _tmp369_;
27979 _tmp371_ = param;
27980 _tmp372_ = bala_parameter_get_ellipsis (_tmp371_);
27981 _tmp373_ = _tmp372_;
27982 if (_tmp373_) {
27983 _tmp370_ = TRUE(!(0));
27984 } else {
27985 BalaParameter* _tmp374_;
27986 gboolean _tmp375_;
27987 gboolean _tmp376_;
27988 _tmp374_ = param;
27989 _tmp375_ = bala_parameter_get_params_array (_tmp374_);
27990 _tmp376_ = _tmp375_;
27991 _tmp370_ = _tmp376_;
27992 }
27993 ellipsis = _tmp370_;
27994 if (!ellipsis) {
27995 BalaParameter* _tmp377_;
27996 BalaParameterDirection _tmp378_;
27997 BalaParameterDirection _tmp379_;
27998 gboolean _tmp382_ = FALSE(0);
27999 BalaParameter* _tmp383_;
28000 BalaParameter* _tmp427_;
28001 BalaExpression* _tmp428_;
28002 BalaCCodeExpression* _tmp429_;
28003 BalaCCodeExpression* _tmp430_;
28004 BalaParameter* _tmp431_;
28005 gchar* _tmp432_;
28006 gchar* _tmp433_;
28007 gboolean _tmp434_;
28008 _tmp377_ = param;
28009 _tmp378_ = bala_parameter_get_direction (_tmp377_);
28010 _tmp379_ = _tmp378_;
28011 if (_tmp379_ == BALA_PARAMETER_DIRECTION_OUT) {
28012 BalaHashMap* _tmp380_;
28013 BalaHashMap* _tmp381_;
28014 _tmp380_ = out_arg_map;
28015 _tmp381_ = _bala_map_ref0 (_tmp380_);
28016 _bala_map_unref0 (carg_map)((carg_map == ((void*)0)) ? ((void*)0) : (carg_map = (bala_map_unref
(carg_map), ((void*)0))))
;
28017 carg_map = _tmp381_;
28018 }
28019 _tmp383_ = param;
28020 if (bala_get_ccode_array_length ((BalaCodeNode*) _tmp383_)) {
28021 BalaParameter* _tmp384_;
28022 BalaDataType* _tmp385_;
28023 BalaDataType* _tmp386_;
28024 _tmp384_ = param;
28025 _tmp385_ = bala_variable_get_variable_type ((BalaVariable*) _tmp384_);
28026 _tmp386_ = _tmp385_;
28027 _tmp382_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp386_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp386_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
28028 } else {
28029 _tmp382_ = FALSE(0);
28030 }
28031 if (_tmp382_) {
28032 BalaArrayType* array_type = NULL((void*)0);
28033 BalaParameter* _tmp387_;
28034 BalaDataType* _tmp388_;
28035 BalaDataType* _tmp389_;
28036 BalaArrayType* _tmp390_;
28037 _tmp387_ = param;
28038 _tmp388_ = bala_variable_get_variable_type ((BalaVariable*) _tmp387_);
28039 _tmp389_ = _tmp388_;
28040 _tmp390_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp389_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp389_), ((bala_array_type_get_type ())))))
);
28041 array_type = _tmp390_;
28042 {
28043 gint dim = 0;
28044 dim = 1;
28045 {
28046 gboolean _tmp391_ = FALSE(0);
28047 _tmp391_ = TRUE(!(0));
28048 while (TRUE(!(0))) {
28049 BalaArrayType* _tmp393_;
28050 gint _tmp394_;
28051 gint _tmp395_;
28052 BalaHashMap* _tmp396_;
28053 BalaParameter* _tmp397_;
28054 BalaExpression* _tmp398_;
28055 BalaCCodeExpression* _tmp399_;
28056 BalaCCodeExpression* _tmp400_;
28057 if (!_tmp391_) {
28058 gint _tmp392_;
28059 _tmp392_ = dim;
28060 dim = _tmp392_ + 1;
28061 }
28062 _tmp391_ = FALSE(0);
28063 _tmp393_ = array_type;
28064 _tmp394_ = bala_array_type_get_rank (_tmp393_);
28065 _tmp395_ = _tmp394_;
28066 if (!(dim <= _tmp395_)) {
28067 break;
28068 }
28069 _tmp396_ = carg_map;
28070 _tmp397_ = param;
28071 _tmp398_ = arg;
28072 _tmp399_ = bala_ccode_base_module_get_array_length_cexpression (self, _tmp398_, dim);
28073 _tmp400_ = _tmp399_;
28074 bala_map_set ((BalaMap*) _tmp396_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, bala_get_ccode_array_length_pos ((BalaCodeNode*) _tmp397_) + (0.01 * dim), FALSE(0))), _tmp400_);
28075 _bala_ccode_node_unref0 (_tmp400_)((_tmp400_ == ((void*)0)) ? ((void*)0) : (_tmp400_ = (bala_ccode_node_unref
(_tmp400_), ((void*)0))))
;
28076 }
28077 }
28078 }
28079 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
28080 } else {
28081 gboolean _tmp401_ = FALSE(0);
28082 BalaParameter* _tmp402_;
28083 _tmp402_ = param;
28084 if (bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp402_)) {
28085 BalaParameter* _tmp403_;
28086 BalaDataType* _tmp404_;
28087 BalaDataType* _tmp405_;
28088 _tmp403_ = param;
28089 _tmp404_ = bala_variable_get_variable_type ((BalaVariable*) _tmp403_);
28090 _tmp405_ = _tmp404_;
28091 _tmp401_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp405_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp405_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
28092 } else {
28093 _tmp401_ = FALSE(0);
28094 }
28095 if (_tmp401_) {
28096 BalaDelegateType* deleg_type = NULL((void*)0);
28097 BalaParameter* _tmp406_;
28098 BalaDataType* _tmp407_;
28099 BalaDataType* _tmp408_;
28100 BalaDelegateType* _tmp409_;
28101 BalaDelegate* d = NULL((void*)0);
28102 BalaDelegateType* _tmp410_;
28103 BalaDelegate* _tmp411_;
28104 BalaDelegate* _tmp412_;
28105 BalaDelegate* _tmp413_;
28106 BalaDelegate* _tmp414_;
28107 gboolean _tmp415_;
28108 gboolean _tmp416_;
28109 _tmp406_ = param;
28110 _tmp407_ = bala_variable_get_variable_type ((BalaVariable*) _tmp406_);
28111 _tmp408_ = _tmp407_;
28112 _tmp409_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp408_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp408_), ((bala_delegate_type_get_type ())))))
);
28113 deleg_type = _tmp409_;
28114 _tmp410_ = deleg_type;
28115 _tmp411_ = bala_delegate_type_get_delegate_symbol (_tmp410_);
28116 _tmp412_ = _tmp411_;
28117 _tmp413_ = _bala_code_node_ref0 (_tmp412_);
28118 d = _tmp413_;
28119 _tmp414_ = d;
28120 _tmp415_ = bala_delegate_get_has_target (_tmp414_);
28121 _tmp416_ = _tmp415_;
28122 if (_tmp416_) {
28123 BalaCCodeExpression* delegate_target_destroy_notify = NULL((void*)0);
28124 BalaCCodeExpression* delegate_target = NULL((void*)0);
28125 BalaExpression* _tmp417_;
28126 BalaCCodeExpression* _tmp418_ = NULL((void*)0);
28127 BalaCCodeExpression* _tmp419_;
28128 BalaHashMap* _tmp420_;
28129 BalaParameter* _tmp421_;
28130 BalaCCodeExpression* _tmp422_;
28131 BalaDelegateType* _tmp423_;
28132 _tmp417_ = arg;
28133 _tmp419_ = bala_ccode_base_module_get_delegate_target_cexpression (self, _tmp417_, &_tmp418_);
28134 _bala_ccode_node_unref0 (delegate_target_destroy_notify)((delegate_target_destroy_notify == ((void*)0)) ? ((void*)0) :
(delegate_target_destroy_notify = (bala_ccode_node_unref (delegate_target_destroy_notify
), ((void*)0))))
;
28135 delegate_target_destroy_notify = _tmp418_;
28136 delegate_target = _tmp419_;
28137 _tmp420_ = carg_map;
28138 _tmp421_ = param;
28139 _tmp422_ = delegate_target;
28140 bala_map_set ((BalaMap*) _tmp420_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, bala_get_ccode_delegate_target_pos ((BalaCodeNode*) _tmp421_), FALSE(0))), _tmp422_);
28141 _tmp423_ = deleg_type;
28142 if (bala_data_type_is_disposable ((BalaDataType*) _tmp423_)) {
28143 BalaHashMap* _tmp424_;
28144 BalaParameter* _tmp425_;
28145 BalaCCodeExpression* _tmp426_;
28146 _tmp424_ = carg_map;
28147 _tmp425_ = param;
28148 _tmp426_ = delegate_target_destroy_notify;
28149 bala_map_set ((BalaMap*) _tmp424_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, bala_get_ccode_destroy_notify_pos ((BalaCodeNode*) _tmp425_), FALSE(0))), _tmp426_);
28150 }
28151 _bala_ccode_node_unref0 (delegate_target)((delegate_target == ((void*)0)) ? ((void*)0) : (delegate_target
= (bala_ccode_node_unref (delegate_target), ((void*)0))))
;
28152 _bala_ccode_node_unref0 (delegate_target_destroy_notify)((delegate_target_destroy_notify == ((void*)0)) ? ((void*)0) :
(delegate_target_destroy_notify = (bala_ccode_node_unref (delegate_target_destroy_notify
), ((void*)0))))
;
28153 }
28154 _bala_code_node_unref0 (d)((d == ((void*)0)) ? ((void*)0) : (d = (bala_code_node_unref (
d), ((void*)0))))
;
28155 _bala_code_node_unref0 (deleg_type)((deleg_type == ((void*)0)) ? ((void*)0) : (deleg_type = (bala_code_node_unref
(deleg_type), ((void*)0))))
;
28156 }
28157 }
28158 _tmp427_ = param;
28159 _tmp428_ = arg;
28160 _tmp429_ = cexpr;
28161 _tmp430_ = bala_ccode_base_module_handle_struct_argument (self, _tmp427_, _tmp428_, _tmp429_);
28162 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
28163 cexpr = _tmp430_;
28164 _tmp431_ = param;
28165 _tmp432_ = bala_get_ccode_type ((BalaCodeNode*) _tmp431_);
28166 _tmp433_ = _tmp432_;
28167 _tmp434_ = _tmp433_ != NULL((void*)0);
28168 _g_free0 (_tmp433_)(_tmp433_ = (g_free (_tmp433_), ((void*)0)));
28169 if (_tmp434_) {
28170 BalaCCodeExpression* _tmp435_;
28171 BalaParameter* _tmp436_;
28172 gchar* _tmp437_;
28173 gchar* _tmp438_;
28174 BalaCCodeCastExpression* _tmp439_;
28175 _tmp435_ = cexpr;
28176 _tmp436_ = param;
28177 _tmp437_ = bala_get_ccode_type ((BalaCodeNode*) _tmp436_);
28178 _tmp438_ = _tmp437_;
28179 _tmp439_ = bala_ccode_cast_expression_new (_tmp435_, _tmp438_);
28180 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
28181 cexpr = (BalaCCodeExpression*) _tmp439_;
28182 _g_free0 (_tmp438_)(_tmp438_ = (g_free (_tmp438_), ((void*)0)));
28183 }
28184 } else {
28185 BalaExpression* _tmp440_;
28186 BalaCCodeExpression* _tmp441_;
28187 BalaCCodeExpression* _tmp442_;
28188 _tmp440_ = arg;
28189 _tmp441_ = cexpr;
28190 _tmp442_ = bala_ccode_base_module_handle_struct_argument (self, NULL((void*)0), _tmp440_, _tmp441_);
28191 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
28192 cexpr = _tmp442_;
28193 }
28194 _tmp443_ = param;
28195 arg_pos = bala_ccode_base_module_get_param_pos (self, bala_get_ccode_pos (_tmp443_), ellipsis);
28196 } else {
28197 BalaExpression* _tmp444_;
28198 BalaCCodeExpression* _tmp445_;
28199 BalaCCodeExpression* _tmp446_;
28200 _tmp444_ = arg;
28201 _tmp445_ = cexpr;
28202 _tmp446_ = bala_ccode_base_module_handle_struct_argument (self, NULL((void*)0), _tmp444_, _tmp445_);
28203 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
28204 cexpr = _tmp446_;
28205 arg_pos = bala_ccode_base_module_get_param_pos (self, (gdouble) i, ellipsis);
28206 }
28207 _tmp447_ = carg_map;
28208 _tmp448_ = cexpr;
28209 bala_map_set ((BalaMap*) _tmp447_, (gpointer) ((gintptr) arg_pos), _tmp448_);
28210 _tmp449_ = i;
28211 i = _tmp449_ + 1;
28212 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
28213 _bala_map_unref0 (carg_map)((carg_map == ((void*)0)) ? ((void*)0) : (carg_map = (bala_map_unref
(carg_map), ((void*)0))))
;
28214 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
28215 _bala_code_node_unref0 (arg)((arg == ((void*)0)) ? ((void*)0) : (arg = (bala_code_node_unref
(arg), ((void*)0))))
;
28216 }
28217 _bala_iterable_unref0 (_arg_list)((_arg_list == ((void*)0)) ? ((void*)0) : (_arg_list = (bala_iterable_unref
(_arg_list), ((void*)0))))
;
28218 }
28219 _tmp450_ = params_it;
28220 if (bala_iterator_next (_tmp450_)) {
28221 BalaParameter* param = NULL((void*)0);
28222 BalaIterator* _tmp451_;
28223 gpointer _tmp452_;
28224 gboolean _tmp453_ = FALSE(0);
28225 BalaParameter* _tmp454_;
28226 gboolean _tmp455_;
28227 gboolean _tmp456_;
28228 _tmp451_ = params_it;
28229 _tmp452_ = bala_iterator_get (_tmp451_);
28230 param = (BalaParameter*) _tmp452_;
28231 _tmp454_ = param;
28232 _tmp455_ = bala_parameter_get_params_array (_tmp454_);
28233 _tmp456_ = _tmp455_;
28234 if (_tmp456_) {
28235 _tmp453_ = TRUE(!(0));
28236 } else {
28237 BalaParameter* _tmp457_;
28238 gboolean _tmp458_;
28239 gboolean _tmp459_;
28240 _tmp457_ = param;
28241 _tmp458_ = bala_parameter_get_ellipsis (_tmp457_);
28242 _tmp459_ = _tmp458_;
28243 _tmp453_ = _tmp459_;
28244 }
28245 _bala_assert (_tmp453_, "param.params_array || param.ellipsis")if (_tmp453_) ; else g_assertion_message_expr ("bala-ccodegen"
, "balaccodebasemodule.c", 28245, ((const char*) (__func__)),
"param.params_array || param.ellipsis");
;
28246 ellipsis = TRUE(!(0));
28247 _bala_code_node_unref0 (param)((param == ((void*)0)) ? ((void*)0) : (param = (bala_code_node_unref
(param), ((void*)0))))
;
28248 }
28249 _tmp460_ = bala_code_node_get_tree_can_fail ((BalaCodeNode*) expr);
28250 _tmp461_ = _tmp460_;
28251 if (_tmp461_) {
28252 BalaHashMap* _tmp462_;
28253 BalaCCodeExpression* _tmp463_;
28254 BalaCCodeExpression* _tmp464_;
28255 BalaCCodeUnaryExpression* _tmp465_;
28256 BalaCCodeUnaryExpression* _tmp466_;
28257 bala_ccode_base_module_set_current_method_inner_error (self, TRUE(!(0)));
28258 _tmp462_ = out_arg_map;
28259 _tmp463_ = bala_ccode_base_module_get_inner_error_cexpression (self);
28260 _tmp464_ = _tmp463_;
28261 _tmp465_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp464_);
28262 _tmp466_ = _tmp465_;
28263 bala_map_set ((BalaMap*) _tmp462_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (gdouble) -1, FALSE(0))), (BalaCCodeExpression*) _tmp466_);
28264 _bala_ccode_node_unref0 (_tmp466_)((_tmp466_ == ((void*)0)) ? ((void*)0) : (_tmp466_ = (bala_ccode_node_unref
(_tmp466_), ((void*)0))))
;
28265 _bala_ccode_node_unref0 (_tmp464_)((_tmp464_ == ((void*)0)) ? ((void*)0) : (_tmp464_ = (bala_ccode_node_unref
(_tmp464_), ((void*)0))))
;
28266 }
28267 if (ellipsis) {
28268 BalaMethod* _tmp467_;
28269 _tmp467_ = m;
28270 if (_tmp467_ == NULL((void*)0)) {
28271 BalaHashMap* _tmp468_;
28272 BalaCCodeConstant* _tmp469_;
28273 BalaCCodeConstant* _tmp470_;
28274 _tmp468_ = in_arg_map;
28275 _tmp469_ = bala_ccode_constant_new ("NULL");
28276 _tmp470_ = _tmp469_;
28277 bala_map_set ((BalaMap*) _tmp468_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (gdouble) -1, TRUE(!(0)))), (BalaCCodeExpression*) _tmp470_);
28278 _bala_ccode_node_unref0 (_tmp470_)((_tmp470_ == ((void*)0)) ? ((void*)0) : (_tmp470_ = (bala_ccode_node_unref
(_tmp470_), ((void*)0))))
;
28279 } else {
28280 gboolean _tmp471_ = FALSE(0);
28281 gboolean _tmp472_ = FALSE(0);
28282 BalaMethod* _tmp473_;
28283 gboolean _tmp474_;
28284 gboolean _tmp475_;
28285 _tmp473_ = m;
28286 _tmp474_ = bala_method_get_printf_format (_tmp473_);
28287 _tmp475_ = _tmp474_;
28288 if (!_tmp475_) {
28289 BalaMethod* _tmp476_;
28290 gboolean _tmp477_;
28291 gboolean _tmp478_;
28292 _tmp476_ = m;
28293 _tmp477_ = bala_method_get_scanf_format (_tmp476_);
28294 _tmp478_ = _tmp477_;
28295 _tmp472_ = !_tmp478_;
28296 } else {
28297 _tmp472_ = FALSE(0);
28298 }
28299 if (_tmp472_) {
28300 BalaMethod* _tmp479_;
28301 gchar* _tmp480_;
28302 gchar* _tmp481_;
28303 _tmp479_ = m;
28304 _tmp480_ = bala_get_ccode_sentinel (_tmp479_);
28305 _tmp481_ = _tmp480_;
28306 _tmp471_ = g_strcmp0 (_tmp481_, "") != 0;
28307 _g_free0 (_tmp481_)(_tmp481_ = (g_free (_tmp481_), ((void*)0)));
28308 } else {
28309 _tmp471_ = FALSE(0);
28310 }
28311 if (_tmp471_) {
28312 BalaHashMap* _tmp482_;
28313 BalaMethod* _tmp483_;
28314 gchar* _tmp484_;
28315 gchar* _tmp485_;
28316 BalaCCodeConstant* _tmp486_;
28317 BalaCCodeConstant* _tmp487_;
28318 _tmp482_ = in_arg_map;
28319 _tmp483_ = m;
28320 _tmp484_ = bala_get_ccode_sentinel (_tmp483_);
28321 _tmp485_ = _tmp484_;
28322 _tmp486_ = bala_ccode_constant_new (_tmp485_);
28323 _tmp487_ = _tmp486_;
28324 bala_map_set ((BalaMap*) _tmp482_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (gdouble) -1, TRUE(!(0)))), (BalaCCodeExpression*) _tmp487_);
28325 _bala_ccode_node_unref0 (_tmp487_)((_tmp487_ == ((void*)0)) ? ((void*)0) : (_tmp487_ = (bala_ccode_node_unref
(_tmp487_), ((void*)0))))
;
28326 _g_free0 (_tmp485_)(_tmp485_ = (g_free (_tmp485_), ((void*)0)));
28327 }
28328 }
28329 }
28330 _tmp490_ = st;
28331 if (_tmp490_ != NULL((void*)0)) {
28332 BalaStruct* _tmp491_;
28333 _tmp491_ = st;
28334 _tmp489_ = !bala_struct_is_simple_type (_tmp491_);
28335 } else {
28336 _tmp489_ = FALSE(0);
28337 }
28338 if (_tmp489_) {
28339 BalaMethod* _tmp492_;
28340 _tmp492_ = m;
28341 _tmp488_ = bala_get_ccode_instance_pos ((BalaCodeNode*) _tmp492_) < ((gdouble) 0);
28342 } else {
28343 _tmp488_ = FALSE(0);
28344 }
28345 if (_tmp488_) {
28346 BalaHashMap* _tmp493_;
28347 BalaCCodeExpression* _tmp494_;
28348 BalaCCodeUnaryExpression* _tmp495_;
28349 BalaCCodeUnaryExpression* _tmp496_;
28350 _tmp493_ = out_arg_map;
28351 _tmp494_ = instance;
28352 _tmp495_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp494_);
28353 _tmp496_ = _tmp495_;
28354 bala_map_set ((BalaMap*) _tmp493_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (gdouble) -3, FALSE(0))), (BalaCCodeExpression*) _tmp496_);
28355 _bala_ccode_node_unref0 (_tmp496_)((_tmp496_ == ((void*)0)) ? ((void*)0) : (_tmp496_ = (bala_ccode_node_unref
(_tmp496_), ((void*)0))))
;
28356 }
28357 _tmp498_ = m;
28358 if (_tmp498_ != NULL((void*)0)) {
28359 BalaMethod* _tmp499_;
28360 gboolean _tmp500_;
28361 gboolean _tmp501_;
28362 _tmp499_ = m;
28363 _tmp500_ = bala_method_get_coroutine (_tmp499_);
28364 _tmp501_ = _tmp500_;
28365 _tmp497_ = _tmp501_;
28366 } else {
28367 _tmp497_ = FALSE(0);
28368 }
28369 if (_tmp497_) {
28370 gboolean _tmp502_;
28371 gboolean _tmp503_;
28372 _tmp502_ = bala_object_creation_expression_get_is_yield_expression (expr);
28373 _tmp503_ = _tmp502_;
28374 if (_tmp503_) {
28375 BalaHashMap* _tmp504_;
28376 BalaMethod* _tmp505_;
28377 BalaMethod* _tmp506_;
28378 gchar* _tmp507_;
28379 gchar* _tmp508_;
28380 BalaCCodeIdentifier* _tmp509_;
28381 BalaCCodeIdentifier* _tmp510_;
28382 BalaHashMap* _tmp511_;
28383 BalaCCodeIdentifier* _tmp512_;
28384 BalaCCodeIdentifier* _tmp513_;
28385 _tmp504_ = in_arg_map;
28386 _tmp505_ = bala_ccode_base_module_get_current_method (self);
28387 _tmp506_ = _tmp505_;
28388 _tmp507_ = bala_ccode_base_module_generate_ready_function (self, _tmp506_);
28389 _tmp508_ = _tmp507_;
28390 _tmp509_ = bala_ccode_identifier_new (_tmp508_);
28391 _tmp510_ = _tmp509_;
28392 bala_map_set ((BalaMap*) _tmp504_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, (gdouble) -1, FALSE(0))), (BalaCCodeExpression*) _tmp510_);
28393 _bala_ccode_node_unref0 (_tmp510_)((_tmp510_ == ((void*)0)) ? ((void*)0) : (_tmp510_ = (bala_ccode_node_unref
(_tmp510_), ((void*)0))))
;
28394 _g_free0 (_tmp508_)(_tmp508_ = (g_free (_tmp508_), ((void*)0)));
28395 _tmp511_ = in_arg_map;
28396 _tmp512_ = bala_ccode_identifier_new ("_data_");
28397 _tmp513_ = _tmp512_;
28398 bala_map_set ((BalaMap*) _tmp511_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, -0.9, FALSE(0))), (BalaCCodeExpression*) _tmp513_);
28399 _bala_ccode_node_unref0 (_tmp513_)((_tmp513_ == ((void*)0)) ? ((void*)0) : (_tmp513_ = (bala_ccode_node_unref
(_tmp513_), ((void*)0))))
;
28400 }
28401 }
28402 _tmp516_ = m;
28403 if (_tmp516_ != NULL((void*)0)) {
28404 BalaMethod* _tmp517_;
28405 gboolean _tmp518_;
28406 gboolean _tmp519_;
28407 _tmp517_ = m;
28408 _tmp518_ = bala_method_get_coroutine (_tmp517_);
28409 _tmp519_ = _tmp518_;
28410 _tmp515_ = _tmp519_;
28411 } else {
28412 _tmp515_ = FALSE(0);
28413 }
28414 if (_tmp515_) {
28415 BalaMethod* _tmp520_;
28416 BalaSymbol* _tmp521_;
28417 BalaSymbol* _tmp522_;
28418 _tmp520_ = m;
28419 _tmp521_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp520_);
28420 _tmp522_ = _tmp521_;
28421 _tmp514_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp522_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp522_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
28422 } else {
28423 _tmp514_ = FALSE(0);
28424 }
28425 if (_tmp514_) {
28426 BalaMethod* _tmp523_;
28427 _tmp523_ = m;
28428 if (bala_get_ccode_finish_instance (_tmp523_)) {
28429 BalaCCodeMemberAccess* tmp = NULL((void*)0);
28430 BalaCCodeIdentifier* _tmp524_;
28431 BalaCCodeIdentifier* _tmp525_;
28432 BalaCCodeMemberAccess* _tmp526_;
28433 BalaCCodeMemberAccess* _tmp527_;
28434 BalaHashMap* _tmp528_;
28435 BalaMethod* _tmp529_;
28436 BalaCCodeMemberAccess* _tmp530_;
28437 _tmp524_ = bala_ccode_identifier_new ("_data_");
28438 _tmp525_ = _tmp524_;
28439 _tmp526_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp525_, "_source_object_");
28440 _tmp527_ = _tmp526_;
28441 _bala_ccode_node_unref0 (_tmp525_)((_tmp525_ == ((void*)0)) ? ((void*)0) : (_tmp525_ = (bala_ccode_node_unref
(_tmp525_), ((void*)0))))
;
28442 tmp = _tmp527_;
28443 _tmp528_ = out_arg_map;
28444 _tmp529_ = m;
28445 _tmp530_ = tmp;
28446 bala_map_set ((BalaMap*) _tmp528_, (gpointer) ((gintptr) bala_ccode_base_module_get_param_pos (self, bala_get_ccode_instance_pos ((BalaCodeNode*) _tmp529_), FALSE(0))), (BalaCCodeExpression*) _tmp530_);
28447 _bala_ccode_node_unref0 (tmp)((tmp == ((void*)0)) ? ((void*)0) : (tmp = (bala_ccode_node_unref
(tmp), ((void*)0))))
;
28448 }
28449 }
28450 _tmp531_ = async_call;
28451 _tmp532_ = creation_call;
28452 if (_tmp531_ != _tmp532_) {
28453 last_pos = -1;
28454 while (TRUE(!(0))) {
28455 BalaCCodeFunctionCall* _tmp543_;
28456 BalaHashMap* _tmp544_;
28457 gpointer _tmp545_;
28458 BalaCCodeExpression* _tmp546_;
28459 min_pos = -1;
28460 {
28461 BalaIterator* _pos_it = NULL((void*)0);
28462 BalaHashMap* _tmp533_;
28463 BalaSet* _tmp534_;
28464 BalaSet* _tmp535_;
28465 BalaIterator* _tmp536_;
28466 BalaIterator* _tmp537_;
28467 _tmp533_ = out_arg_map;
28468 _tmp534_ = bala_map_get_keys ((BalaMap*) _tmp533_);
28469 _tmp535_ = _tmp534_;
28470 _tmp536_ = bala_iterable_iterator ((BalaIterable*) _tmp535_);
28471 _tmp537_ = _tmp536_;
28472 _bala_iterable_unref0 (_tmp535_)((_tmp535_ == ((void*)0)) ? ((void*)0) : (_tmp535_ = (bala_iterable_unref
(_tmp535_), ((void*)0))))
;
28473 _pos_it = _tmp537_;
28474 while (TRUE(!(0))) {
28475 BalaIterator* _tmp538_;
28476 gint pos = 0;
28477 BalaIterator* _tmp539_;
28478 gpointer _tmp540_;
28479 gboolean _tmp541_ = FALSE(0);
28480 _tmp538_ = _pos_it;
28481 if (!bala_iterator_next (_tmp538_)) {
28482 break;
28483 }
28484 _tmp539_ = _pos_it;
28485 _tmp540_ = bala_iterator_get (_tmp539_);
28486 pos = (gint) ((gintptr) _tmp540_);
28487 if (pos > last_pos) {
28488 gboolean _tmp542_ = FALSE(0);
28489 if (min_pos == -1) {
28490 _tmp542_ = TRUE(!(0));
28491 } else {
28492 _tmp542_ = pos < min_pos;
28493 }
28494 _tmp541_ = _tmp542_;
28495 } else {
28496 _tmp541_ = FALSE(0);
28497 }
28498 if (_tmp541_) {
28499 min_pos = pos;
28500 }
28501 }
28502 _bala_iterator_unref0 (_pos_it)((_pos_it == ((void*)0)) ? ((void*)0) : (_pos_it = (bala_iterator_unref
(_pos_it), ((void*)0))))
;
28503 }
28504 if (min_pos == -1) {
28505 break;
28506 }
28507 _tmp543_ = creation_call;
28508 _tmp544_ = out_arg_map;
28509 _tmp545_ = bala_map_get ((BalaMap*) _tmp544_, (gpointer) ((gintptr) min_pos));
28510 _tmp546_ = (BalaCCodeExpression*) _tmp545_;
28511 bala_ccode_function_call_add_argument (_tmp543_, _tmp546_);
28512 _bala_ccode_node_unref0 (_tmp546_)((_tmp546_ == ((void*)0)) ? ((void*)0) : (_tmp546_ = (bala_ccode_node_unref
(_tmp546_), ((void*)0))))
;
28513 last_pos = min_pos;
28514 }
28515 }
28516 _tmp547_ = async_call;
28517 if (_tmp547_ != NULL((void*)0)) {
28518 last_pos = -1;
28519 while (TRUE(!(0))) {
28520 BalaCCodeFunctionCall* _tmp558_;
28521 BalaHashMap* _tmp559_;
28522 gpointer _tmp560_;
28523 BalaCCodeExpression* _tmp561_;
28524 min_pos = -1;
28525 {
28526 BalaIterator* _pos_it = NULL((void*)0);
28527 BalaHashMap* _tmp548_;
28528 BalaSet* _tmp549_;
28529 BalaSet* _tmp550_;
28530 BalaIterator* _tmp551_;
28531 BalaIterator* _tmp552_;
28532 _tmp548_ = in_arg_map;
28533 _tmp549_ = bala_map_get_keys ((BalaMap*) _tmp548_);
28534 _tmp550_ = _tmp549_;
28535 _tmp551_ = bala_iterable_iterator ((BalaIterable*) _tmp550_);
28536 _tmp552_ = _tmp551_;
28537 _bala_iterable_unref0 (_tmp550_)((_tmp550_ == ((void*)0)) ? ((void*)0) : (_tmp550_ = (bala_iterable_unref
(_tmp550_), ((void*)0))))
;
28538 _pos_it = _tmp552_;
28539 while (TRUE(!(0))) {
28540 BalaIterator* _tmp553_;
28541 gint pos = 0;
28542 BalaIterator* _tmp554_;
28543 gpointer _tmp555_;
28544 gboolean _tmp556_ = FALSE(0);
28545 _tmp553_ = _pos_it;
28546 if (!bala_iterator_next (_tmp553_)) {
28547 break;
28548 }
28549 _tmp554_ = _pos_it;
28550 _tmp555_ = bala_iterator_get (_tmp554_);
28551 pos = (gint) ((gintptr) _tmp555_);
28552 if (pos > last_pos) {
28553 gboolean _tmp557_ = FALSE(0);
28554 if (min_pos == -1) {
28555 _tmp557_ = TRUE(!(0));
28556 } else {
28557 _tmp557_ = pos < min_pos;
28558 }
28559 _tmp556_ = _tmp557_;
28560 } else {
28561 _tmp556_ = FALSE(0);
28562 }
28563 if (_tmp556_) {
28564 min_pos = pos;
28565 }
28566 }
28567 _bala_iterator_unref0 (_pos_it)((_pos_it == ((void*)0)) ? ((void*)0) : (_pos_it = (bala_iterator_unref
(_pos_it), ((void*)0))))
;
28568 }
28569 if (min_pos == -1) {
28570 break;
28571 }
28572 _tmp558_ = async_call;
28573 _tmp559_ = in_arg_map;
28574 _tmp560_ = bala_map_get ((BalaMap*) _tmp559_, (gpointer) ((gintptr) min_pos));
28575 _tmp561_ = (BalaCCodeExpression*) _tmp560_;
28576 bala_ccode_function_call_add_argument (_tmp558_, _tmp561_);
28577 _bala_ccode_node_unref0 (_tmp561_)((_tmp561_ == ((void*)0)) ? ((void*)0) : (_tmp561_ = (bala_ccode_node_unref
(_tmp561_), ((void*)0))))
;
28578 last_pos = min_pos;
28579 }
28580 }
28581 _tmp562_ = bala_object_creation_expression_get_is_yield_expression (expr);
28582 _tmp563_ = _tmp562_;
28583 if (_tmp563_) {
28584 gint state = 0;
28585 BalaCCodeBaseModuleEmitContext* _tmp564_;
28586 gint _tmp565_;
28587 BalaCCodeFunction* _tmp566_;
28588 BalaCCodeFunction* _tmp567_;
28589 BalaCCodeIdentifier* _tmp568_;
28590 BalaCCodeIdentifier* _tmp569_;
28591 BalaCCodeMemberAccess* _tmp570_;
28592 BalaCCodeMemberAccess* _tmp571_;
28593 gchar* _tmp572_;
28594 gchar* _tmp573_;
28595 BalaCCodeConstant* _tmp574_;
28596 BalaCCodeConstant* _tmp575_;
28597 BalaCCodeFunction* _tmp576_;
28598 BalaCCodeFunction* _tmp577_;
28599 BalaCCodeFunctionCall* _tmp578_;
28600 BalaCCodeFunction* _tmp579_;
28601 BalaCCodeFunction* _tmp580_;
28602 BalaCCodeConstant* _tmp581_;
28603 BalaCCodeConstant* _tmp582_;
28604 BalaCCodeFunction* _tmp583_;
28605 BalaCCodeFunction* _tmp584_;
28606 gchar* _tmp585_;
28607 gchar* _tmp586_;
28608 _tmp564_ = self->emit_context;
28609 _tmp565_ = _tmp564_->next_coroutine_state;
28610 _tmp564_->next_coroutine_state = _tmp565_ + 1;
28611 state = _tmp565_;
28612 _tmp566_ = bala_ccode_base_module_get_ccode (self);
28613 _tmp567_ = _tmp566_;
28614 _tmp568_ = bala_ccode_identifier_new ("_data_");
28615 _tmp569_ = _tmp568_;
28616 _tmp570_ = bala_ccode_member_access_new_pointer ((BalaCCodeExpression*) _tmp569_, "_state_");
28617 _tmp571_ = _tmp570_;
28618 _tmp572_ = g_strdup_printf ("%i", state);
28619 _tmp573_ = _tmp572_;
28620 _tmp574_ = bala_ccode_constant_new (_tmp573_);
28621 _tmp575_ = _tmp574_;
28622 bala_ccode_function_add_assignment (_tmp567_, (BalaCCodeExpression*) _tmp571_, (BalaCCodeExpression*) _tmp575_);
28623 _bala_ccode_node_unref0 (_tmp575_)((_tmp575_ == ((void*)0)) ? ((void*)0) : (_tmp575_ = (bala_ccode_node_unref
(_tmp575_), ((void*)0))))
;
28624 _g_free0 (_tmp573_)(_tmp573_ = (g_free (_tmp573_), ((void*)0)));
28625 _bala_ccode_node_unref0 (_tmp571_)((_tmp571_ == ((void*)0)) ? ((void*)0) : (_tmp571_ = (bala_ccode_node_unref
(_tmp571_), ((void*)0))))
;
28626 _bala_ccode_node_unref0 (_tmp569_)((_tmp569_ == ((void*)0)) ? ((void*)0) : (_tmp569_ = (bala_ccode_node_unref
(_tmp569_), ((void*)0))))
;
28627 _tmp576_ = bala_ccode_base_module_get_ccode (self);
28628 _tmp577_ = _tmp576_;
28629 _tmp578_ = async_call;
28630 bala_ccode_function_add_expression (_tmp577_, (BalaCCodeExpression*) _tmp578_);
28631 _tmp579_ = bala_ccode_base_module_get_ccode (self);
28632 _tmp580_ = _tmp579_;
28633 _tmp581_ = bala_ccode_constant_new ("FALSE");
28634 _tmp582_ = _tmp581_;
28635 bala_ccode_function_add_return (_tmp580_, (BalaCCodeExpression*) _tmp582_);
28636 _bala_ccode_node_unref0 (_tmp582_)((_tmp582_ == ((void*)0)) ? ((void*)0) : (_tmp582_ = (bala_ccode_node_unref
(_tmp582_), ((void*)0))))
;
28637 _tmp583_ = bala_ccode_base_module_get_ccode (self);
28638 _tmp584_ = _tmp583_;
28639 _tmp585_ = g_strdup_printf ("_state_%d", state);
28640 _tmp586_ = _tmp585_;
28641 bala_ccode_function_add_label (_tmp584_, _tmp586_);
28642 _g_free0 (_tmp586_)(_tmp586_ = (g_free (_tmp586_), ((void*)0)));
28643 }
28644 _tmp587_ = creation_call;
28645 _tmp588_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp587_);
28646 _bala_ccode_node_unref0 (creation_expr)((creation_expr == ((void*)0)) ? ((void*)0) : (creation_expr =
(bala_ccode_node_unref (creation_expr), ((void*)0))))
;
28647 creation_expr = _tmp588_;
28648 _tmp589_ = m;
28649 _tmp590_ = bala_get_ccode_type ((BalaCodeNode*) _tmp589_);
28650 _tmp591_ = _tmp590_;
28651 _tmp592_ = _tmp591_ != NULL((void*)0);
28652 _g_free0 (_tmp591_)(_tmp591_ = (g_free (_tmp591_), ((void*)0)));
28653 if (_tmp592_) {
28654 BalaCCodeExpression* _tmp593_;
28655 BalaDataType* _tmp594_;
28656 BalaDataType* _tmp595_;
28657 gchar* _tmp596_;
28658 gchar* _tmp597_;
28659 BalaCCodeCastExpression* _tmp598_;
28660 _tmp593_ = creation_expr;
28661 _tmp594_ = bala_object_creation_expression_get_type_reference (expr);
28662 _tmp595_ = _tmp594_;
28663 _tmp596_ = bala_get_ccode_name ((BalaCodeNode*) _tmp595_);
28664 _tmp597_ = _tmp596_;
28665 _tmp598_ = bala_ccode_cast_expression_new (_tmp593_, _tmp597_);
28666 _bala_ccode_node_unref0 (creation_expr)((creation_expr == ((void*)0)) ? ((void*)0) : (creation_expr =
(bala_ccode_node_unref (creation_expr), ((void*)0))))
;
28667 creation_expr = (BalaCCodeExpression*) _tmp598_;
28668 _g_free0 (_tmp597_)(_tmp597_ = (g_free (_tmp597_), ((void*)0)));
28669 }
28670 _bala_iterator_unref0 (params_it)((params_it == ((void*)0)) ? ((void*)0) : (params_it = (bala_iterator_unref
(params_it), ((void*)0))))
;
28671 _bala_map_unref0 (out_arg_map)((out_arg_map == ((void*)0)) ? ((void*)0) : (out_arg_map = (bala_map_unref
(out_arg_map), ((void*)0))))
;
28672 _bala_map_unref0 (in_arg_map)((in_arg_map == ((void*)0)) ? ((void*)0) : (in_arg_map = (bala_map_unref
(in_arg_map), ((void*)0))))
;
28673 _bala_ccode_node_unref0 (finish_call)((finish_call == ((void*)0)) ? ((void*)0) : (finish_call = (bala_ccode_node_unref
(finish_call), ((void*)0))))
;
28674 _bala_ccode_node_unref0 (async_call)((async_call == ((void*)0)) ? ((void*)0) : (async_call = (bala_ccode_node_unref
(async_call), ((void*)0))))
;
28675 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
28676 _bala_iterable_unref0 (params)((params == ((void*)0)) ? ((void*)0) : (params = (bala_iterable_unref
(params), ((void*)0))))
;
28677 _bala_code_node_unref0 (m)((m == ((void*)0)) ? ((void*)0) : (m = (bala_code_node_unref (
m), ((void*)0))))
;
28678 } else {
28679 BalaSymbol* _tmp599_;
28680 BalaSymbol* _tmp600_;
28681 _tmp599_ = bala_expression_get_symbol_reference ((BalaExpression*) expr);
28682 _tmp600_ = _tmp599_;
28683 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp600_, BALA_TYPE_ERROR_CODE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp600_); GType __t = ((bala_error_code_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
28684 BalaErrorCode* ecode = NULL((void*)0);
28685 BalaSymbol* _tmp601_;
28686 BalaSymbol* _tmp602_;
28687 BalaErrorCode* _tmp603_;
28688 BalaErrorDomain* edomain = NULL((void*)0);
28689 BalaErrorCode* _tmp604_;
28690 BalaSymbol* _tmp605_;
28691 BalaSymbol* _tmp606_;
28692 BalaErrorDomain* _tmp607_;
28693 BalaCCodeFunctionCall* creation_call = NULL((void*)0);
28694 BalaErrorDomain* _tmp608_;
28695 BalaCCodeFile* _tmp609_;
28696 BalaList* _tmp610_;
28697 gint _tmp611_;
28698 gint _tmp612_;
28699 BalaCCodeFunctionCall* _tmp619_;
28700 BalaErrorDomain* _tmp620_;
28701 gchar* _tmp621_;
28702 gchar* _tmp622_;
28703 BalaCCodeIdentifier* _tmp623_;
28704 BalaCCodeIdentifier* _tmp624_;
28705 BalaCCodeFunctionCall* _tmp625_;
28706 BalaErrorCode* _tmp626_;
28707 gchar* _tmp627_;
28708 gchar* _tmp628_;
28709 BalaCCodeIdentifier* _tmp629_;
28710 BalaCCodeIdentifier* _tmp630_;
28711 BalaCCodeFunctionCall* _tmp643_;
28712 BalaCCodeExpression* _tmp644_;
28713 _tmp601_ = bala_expression_get_symbol_reference ((BalaExpression*) expr);
28714 _tmp602_ = _tmp601_;
28715 _tmp603_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp602_, BALA_TYPE_ERROR_CODE, BalaErrorCode)(((BalaErrorCode*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp602_), ((bala_error_code_get_type ())))))
);
28716 ecode = _tmp603_;
28717 _tmp604_ = ecode;
28718 _tmp605_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp604_);
28719 _tmp606_ = _tmp605_;
28720 _tmp607_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp606_, BALA_TYPE_ERROR_DOMAIN, BalaErrorDomain)(((BalaErrorDomain*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp606_), ((bala_error_domain_get_type ())))))
);
28721 edomain = _tmp607_;
28722 _tmp608_ = edomain;
28723 _tmp609_ = self->cfile;
28724 bala_ccode_base_module_generate_error_domain_declaration (self, _tmp608_, _tmp609_);
28725 _tmp610_ = bala_object_creation_expression_get_argument_list (expr);
28726 _tmp611_ = bala_collection_get_size ((BalaCollection*) _tmp610_);
28727 _tmp612_ = _tmp611_;
28728 if (_tmp612_ == 1) {
28729 BalaCCodeIdentifier* _tmp613_;
28730 BalaCCodeIdentifier* _tmp614_;
28731 BalaCCodeFunctionCall* _tmp615_;
28732 _tmp613_ = bala_ccode_identifier_new ("g_error_new_literal");
28733 _tmp614_ = _tmp613_;
28734 _tmp615_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp614_);
28735 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
28736 creation_call = _tmp615_;
28737 _bala_ccode_node_unref0 (_tmp614_)((_tmp614_ == ((void*)0)) ? ((void*)0) : (_tmp614_ = (bala_ccode_node_unref
(_tmp614_), ((void*)0))))
;
28738 } else {
28739 BalaCCodeIdentifier* _tmp616_;
28740 BalaCCodeIdentifier* _tmp617_;
28741 BalaCCodeFunctionCall* _tmp618_;
28742 _tmp616_ = bala_ccode_identifier_new ("g_error_new");
28743 _tmp617_ = _tmp616_;
28744 _tmp618_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp617_);
28745 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
28746 creation_call = _tmp618_;
28747 _bala_ccode_node_unref0 (_tmp617_)((_tmp617_ == ((void*)0)) ? ((void*)0) : (_tmp617_ = (bala_ccode_node_unref
(_tmp617_), ((void*)0))))
;
28748 }
28749 _tmp619_ = creation_call;
28750 _tmp620_ = edomain;
28751 _tmp621_ = bala_get_ccode_upper_case_name ((BalaSymbol*) _tmp620_, NULL((void*)0));
28752 _tmp622_ = _tmp621_;
28753 _tmp623_ = bala_ccode_identifier_new (_tmp622_);
28754 _tmp624_ = _tmp623_;
28755 bala_ccode_function_call_add_argument (_tmp619_, (BalaCCodeExpression*) _tmp624_);
28756 _bala_ccode_node_unref0 (_tmp624_)((_tmp624_ == ((void*)0)) ? ((void*)0) : (_tmp624_ = (bala_ccode_node_unref
(_tmp624_), ((void*)0))))
;
28757 _g_free0 (_tmp622_)(_tmp622_ = (g_free (_tmp622_), ((void*)0)));
28758 _tmp625_ = creation_call;
28759 _tmp626_ = ecode;
28760 _tmp627_ = bala_get_ccode_name ((BalaCodeNode*) _tmp626_);
28761 _tmp628_ = _tmp627_;
28762 _tmp629_ = bala_ccode_identifier_new (_tmp628_);
28763 _tmp630_ = _tmp629_;
28764 bala_ccode_function_call_add_argument (_tmp625_, (BalaCCodeExpression*) _tmp630_);
28765 _bala_ccode_node_unref0 (_tmp630_)((_tmp630_ == ((void*)0)) ? ((void*)0) : (_tmp630_ = (bala_ccode_node_unref
(_tmp630_), ((void*)0))))
;
28766 _g_free0 (_tmp628_)(_tmp628_ = (g_free (_tmp628_), ((void*)0)));
28767 {
28768 BalaList* _arg_list = NULL((void*)0);
28769 BalaList* _tmp631_;
28770 BalaList* _tmp632_;
28771 gint _arg_size = 0;
28772 BalaList* _tmp633_;
28773 gint _tmp634_;
28774 gint _tmp635_;
28775 gint _arg_index = 0;
28776 _tmp631_ = bala_object_creation_expression_get_argument_list (expr);
28777 _tmp632_ = _bala_iterable_ref0 (_tmp631_);
28778 _arg_list = _tmp632_;
28779 _tmp633_ = _arg_list;
28780 _tmp634_ = bala_collection_get_size ((BalaCollection*) _tmp633_);
28781 _tmp635_ = _tmp634_;
28782 _arg_size = _tmp635_;
28783 _arg_index = -1;
28784 while (TRUE(!(0))) {
28785 gint _tmp636_;
28786 gint _tmp637_;
28787 BalaExpression* arg = NULL((void*)0);
28788 BalaList* _tmp638_;
28789 gpointer _tmp639_;
28790 BalaCCodeFunctionCall* _tmp640_;
28791 BalaExpression* _tmp641_;
28792 BalaCCodeExpression* _tmp642_;
28793 _arg_index = _arg_index + 1;
28794 _tmp636_ = _arg_index;
28795 _tmp637_ = _arg_size;
28796 if (!(_tmp636_ < _tmp637_)) {
28797 break;
28798 }
28799 _tmp638_ = _arg_list;
28800 _tmp639_ = bala_list_get (_tmp638_, _arg_index);
28801 arg = (BalaExpression*) _tmp639_;
28802 _tmp640_ = creation_call;
28803 _tmp641_ = arg;
28804 _tmp642_ = bala_get_cvalue (_tmp641_);
28805 bala_ccode_function_call_add_argument (_tmp640_, _tmp642_);
28806 _bala_code_node_unref0 (arg)((arg == ((void*)0)) ? ((void*)0) : (arg = (bala_code_node_unref
(arg), ((void*)0))))
;
28807 }
28808 _bala_iterable_unref0 (_arg_list)((_arg_list == ((void*)0)) ? ((void*)0) : (_arg_list = (bala_iterable_unref
(_arg_list), ((void*)0))))
;
28809 }
28810 _tmp643_ = creation_call;
28811 _tmp644_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp643_);
28812 _bala_ccode_node_unref0 (creation_expr)((creation_expr == ((void*)0)) ? ((void*)0) : (creation_expr =
(bala_ccode_node_unref (creation_expr), ((void*)0))))
;
28813 creation_expr = _tmp644_;
28814 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
28815 _bala_code_node_unref0 (edomain)((edomain == ((void*)0)) ? ((void*)0) : (edomain = (bala_code_node_unref
(edomain), ((void*)0))))
;
28816 _bala_code_node_unref0 (ecode)((ecode == ((void*)0)) ? ((void*)0) : (ecode = (bala_code_node_unref
(ecode), ((void*)0))))
;
28817 } else {
28818 _bala_assert (FALSE, "false")if ((0)) ; else g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 28818, ((const char*) (__func__)), "false");
;
28819 }
28820 }
28821 }
28822 }
28823 _tmp645_ = bala_code_node_get_parent_node ((BalaCodeNode*) expr);
28824 _tmp646_ = _tmp645_;
28825 _tmp647_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp646_, BALA_TYPE_LOCAL_VARIABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp646_); GType __t = ((bala_local_variable_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaLocalVariable*) _tmp646_) : NULL((void*)0));
28826 local = _tmp647_;
28827 _tmp649_ = local;
28828 if (_tmp649_ != NULL((void*)0)) {
28829 BalaLocalVariable* _tmp650_;
28830 BalaLocalVariable* _tmp651_;
28831 BalaExpression* _tmp652_;
28832 BalaExpression* _tmp653_;
28833 _tmp650_ = local;
28834 _tmp651_ = local;
28835 _tmp652_ = bala_variable_get_initializer ((BalaVariable*) _tmp651_);
28836 _tmp653_ = _tmp652_;
28837 _tmp648_ = bala_ccode_base_module_is_simple_struct_creation (self, (BalaVariable*) _tmp650_, _tmp653_);
28838 } else {
28839 _tmp648_ = FALSE(0);
28840 }
28841 if (_tmp648_) {
28842 BalaCCodeFunction* _tmp654_;
28843 BalaCCodeFunction* _tmp655_;
28844 BalaCCodeExpression* _tmp656_;
28845 BalaCCodeExpression* _tmp657_;
28846 _tmp654_ = bala_ccode_base_module_get_ccode (self);
28847 _tmp655_ = _tmp654_;
28848 _tmp656_ = creation_expr;
28849 bala_ccode_function_add_expression (_tmp655_, _tmp656_);
28850 _tmp657_ = instance;
28851 bala_set_cvalue ((BalaExpression*) expr, _tmp657_);
28852 } else {
28853 BalaCCodeExpression* _tmp658_;
28854 _tmp658_ = instance;
28855 if (_tmp658_ != NULL((void*)0)) {
28856 BalaDataType* _tmp659_;
28857 BalaDataType* _tmp660_;
28858 BalaTypeSymbol* _tmp661_;
28859 BalaTypeSymbol* _tmp662_;
28860 BalaCCodeExpression* _tmp787_;
28861 _tmp659_ = bala_object_creation_expression_get_type_reference (expr);
28862 _tmp660_ = _tmp659_;
28863 _tmp661_ = bala_data_type_get_type_symbol (_tmp660_);
28864 _tmp662_ = _tmp661_;
28865 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp662_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp662_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
28866 BalaCCodeFunction* _tmp663_;
28867 BalaCCodeFunction* _tmp664_;
28868 BalaCCodeExpression* _tmp665_;
28869 _tmp663_ = bala_ccode_base_module_get_ccode (self);
28870 _tmp664_ = _tmp663_;
28871 _tmp665_ = creation_expr;
28872 bala_ccode_function_add_expression (_tmp664_, _tmp665_);
28873 } else {
28874 BalaCCodeFunction* _tmp666_;
28875 BalaCCodeFunction* _tmp667_;
28876 BalaCCodeExpression* _tmp668_;
28877 BalaCCodeExpression* _tmp669_;
28878 _tmp666_ = bala_ccode_base_module_get_ccode (self);
28879 _tmp667_ = _tmp666_;
28880 _tmp668_ = instance;
28881 _tmp669_ = creation_expr;
28882 bala_ccode_function_add_assignment (_tmp667_, _tmp668_, _tmp669_);
28883 }
28884 {
28885 BalaList* _init_list = NULL((void*)0);
28886 BalaList* _tmp670_;
28887 BalaList* _tmp671_;
28888 gint _init_size = 0;
28889 BalaList* _tmp672_;
28890 gint _tmp673_;
28891 gint _tmp674_;
28892 gint _init_index = 0;
28893 _tmp670_ = bala_object_creation_expression_get_object_initializer (expr);
28894 _tmp671_ = _bala_iterable_ref0 (_tmp670_);
28895 _init_list = _tmp671_;
28896 _tmp672_ = _init_list;
28897 _tmp673_ = bala_collection_get_size ((BalaCollection*) _tmp672_);
28898 _tmp674_ = _tmp673_;
28899 _init_size = _tmp674_;
28900 _init_index = -1;
28901 while (TRUE(!(0))) {
28902 gint _tmp675_;
28903 gint _tmp676_;
28904 BalaMemberInitializer* init = NULL((void*)0);
28905 BalaList* _tmp677_;
28906 gpointer _tmp678_;
28907 BalaMemberInitializer* _tmp679_;
28908 BalaSymbol* _tmp680_;
28909 BalaSymbol* _tmp681_;
28910 _init_index = _init_index + 1;
28911 _tmp675_ = _init_index;
28912 _tmp676_ = _init_size;
28913 if (!(_tmp675_ < _tmp676_)) {
28914 break;
28915 }
28916 _tmp677_ = _init_list;
28917 _tmp678_ = bala_list_get (_tmp677_, _init_index);
28918 init = (BalaMemberInitializer*) _tmp678_;
28919 _tmp679_ = init;
28920 _tmp680_ = bala_member_initializer_get_symbol_reference (_tmp679_);
28921 _tmp681_ = _tmp680_;
28922 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp681_, BALA_TYPE_FIELD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp681_); GType __t = ((bala_field_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
28923 BalaField* f = NULL((void*)0);
28924 BalaMemberInitializer* _tmp682_;
28925 BalaSymbol* _tmp683_;
28926 BalaSymbol* _tmp684_;
28927 BalaField* _tmp685_;
28928 BalaDataType* instance_target_type = NULL((void*)0);
28929 BalaField* _tmp686_;
28930 BalaSymbol* _tmp687_;
28931 BalaSymbol* _tmp688_;
28932 BalaDataType* _tmp689_;
28933 BalaTargetValue* typed_inst = NULL((void*)0);
28934 BalaDataType* _tmp690_;
28935 BalaDataType* _tmp691_;
28936 BalaCCodeExpression* _tmp692_;
28937 BalaGLibValue* _tmp693_;
28938 BalaGLibValue* _tmp694_;
28939 BalaDataType* _tmp695_;
28940 BalaMemberInitializer* _tmp696_;
28941 BalaTargetValue* _tmp697_;
28942 BalaTargetValue* _tmp698_;
28943 BalaField* _tmp699_;
28944 BalaTargetValue* _tmp700_;
28945 BalaMemberInitializer* _tmp701_;
28946 BalaExpression* _tmp702_;
28947 BalaExpression* _tmp703_;
28948 BalaTargetValue* _tmp704_;
28949 BalaTargetValue* _tmp705_;
28950 BalaMemberInitializer* _tmp706_;
28951 BalaSourceReference* _tmp707_;
28952 BalaSourceReference* _tmp708_;
28953 BalaClass* cl = NULL((void*)0);
28954 BalaField* _tmp709_;
28955 BalaSymbol* _tmp710_;
28956 BalaSymbol* _tmp711_;
28957 BalaClass* _tmp712_;
28958 BalaClass* _tmp713_;
28959 _tmp682_ = init;
28960 _tmp683_ = bala_member_initializer_get_symbol_reference (_tmp682_);
28961 _tmp684_ = _tmp683_;
28962 _tmp685_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp684_, BALA_TYPE_FIELD, BalaField)(((BalaField*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp684_), ((bala_field_get_type ())))))
);
28963 f = _tmp685_;
28964 _tmp686_ = f;
28965 _tmp687_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp686_);
28966 _tmp688_ = _tmp687_;
28967 _tmp689_ = bala_semantic_analyzer_get_data_type_for_symbol ((BalaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp688_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp688_), ((bala_typesymbol_get_type ())))))
);
28968 instance_target_type = _tmp689_;
28969 _tmp690_ = bala_object_creation_expression_get_type_reference (expr);
28970 _tmp691_ = _tmp690_;
28971 _tmp692_ = instance;
28972 _tmp693_ = bala_glib_value_new (_tmp691_, _tmp692_, TRUE(!(0)));
28973 _tmp694_ = _tmp693_;
28974 _tmp695_ = instance_target_type;
28975 _tmp696_ = init;
28976 _tmp697_ = bala_ccode_base_module_transform_value (self, (BalaTargetValue*) _tmp694_, _tmp695_, (BalaCodeNode*) _tmp696_);
28977 _tmp698_ = _tmp697_;
28978 _bala_target_value_unref0 (_tmp694_)((_tmp694_ == ((void*)0)) ? ((void*)0) : (_tmp694_ = (bala_target_value_unref
(_tmp694_), ((void*)0))))
;
28979 typed_inst = _tmp698_;
28980 _tmp699_ = f;
28981 _tmp700_ = typed_inst;
28982 _tmp701_ = init;
28983 _tmp702_ = bala_member_initializer_get_initializer (_tmp701_);
28984 _tmp703_ = _tmp702_;
28985 _tmp704_ = bala_expression_get_target_value (_tmp703_);
28986 _tmp705_ = _tmp704_;
28987 _tmp706_ = init;
28988 _tmp707_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp706_);
28989 _tmp708_ = _tmp707_;
28990 bala_code_generator_store_field ((BalaCodeGenerator*) self, _tmp699_, _tmp700_, _tmp705_, _tmp708_);
28991 _tmp709_ = f;
28992 _tmp710_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp709_);
28993 _tmp711_ = _tmp710_;
28994 _tmp712_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp711_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp711_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp711_) : NULL((void*)0));
28995 cl = _tmp712_;
28996 _tmp713_ = cl;
28997 if (_tmp713_ != NULL((void*)0)) {
28998 BalaClass* _tmp714_;
28999 BalaCCodeFile* _tmp715_;
29000 _tmp714_ = cl;
29001 _tmp715_ = self->cfile;
29002 bala_ccode_base_module_generate_class_struct_declaration (self, _tmp714_, _tmp715_);
29003 }
29004 _bala_code_node_unref0 (cl)((cl == ((void*)0)) ? ((void*)0) : (cl = (bala_code_node_unref
(cl), ((void*)0))))
;
29005 _bala_target_value_unref0 (typed_inst)((typed_inst == ((void*)0)) ? ((void*)0) : (typed_inst = (bala_target_value_unref
(typed_inst), ((void*)0))))
;
29006 _bala_code_node_unref0 (instance_target_type)((instance_target_type == ((void*)0)) ? ((void*)0) : (instance_target_type
= (bala_code_node_unref (instance_target_type), ((void*)0)))
)
;
29007 _bala_code_node_unref0 (f)((f == ((void*)0)) ? ((void*)0) : (f = (bala_code_node_unref (
f), ((void*)0))))
;
29008 } else {
29009 BalaMemberInitializer* _tmp716_;
29010 BalaSymbol* _tmp717_;
29011 BalaSymbol* _tmp718_;
29012 _tmp716_ = init;
29013 _tmp717_ = bala_member_initializer_get_symbol_reference (_tmp716_);
29014 _tmp718_ = _tmp717_;
29015 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp718_, BALA_TYPE_PROPERTY)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp718_); GType __t = ((bala_property_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
29016 BalaProperty* p = NULL((void*)0);
29017 BalaMemberInitializer* _tmp719_;
29018 BalaSymbol* _tmp720_;
29019 BalaSymbol* _tmp721_;
29020 BalaProperty* _tmp722_;
29021 BalaProperty* _tmp723_;
29022 BalaProperty* _tmp724_;
29023 BalaProperty* _tmp725_;
29024 BalaDataType* instance_target_type = NULL((void*)0);
29025 BalaProperty* _tmp737_;
29026 BalaSymbol* _tmp738_;
29027 BalaSymbol* _tmp739_;
29028 BalaDataType* _tmp740_;
29029 BalaTargetValue* typed_inst = NULL((void*)0);
29030 BalaDataType* _tmp741_;
29031 BalaDataType* _tmp742_;
29032 BalaCCodeExpression* _tmp743_;
29033 BalaGLibValue* _tmp744_;
29034 BalaGLibValue* _tmp745_;
29035 BalaDataType* _tmp746_;
29036 BalaMemberInitializer* _tmp747_;
29037 BalaTargetValue* _tmp748_;
29038 BalaTargetValue* _tmp749_;
29039 BalaMemberAccess* inst_ma = NULL((void*)0);
29040 BalaMemberAccess* _tmp750_;
29041 BalaMemberAccess* _tmp751_;
29042 BalaTargetValue* _tmp752_;
29043 BalaProperty* _tmp753_;
29044 BalaMemberAccess* _tmp754_;
29045 BalaMemberInitializer* _tmp755_;
29046 BalaExpression* _tmp756_;
29047 BalaExpression* _tmp757_;
29048 BalaTargetValue* _tmp758_;
29049 BalaTargetValue* _tmp759_;
29050 gboolean _tmp760_ = FALSE(0);
29051 BalaProperty* _tmp761_;
29052 BalaPropertyAccessor* _tmp762_;
29053 BalaPropertyAccessor* _tmp763_;
29054 BalaDataType* _tmp764_;
29055 BalaDataType* _tmp765_;
29056 gboolean _tmp766_;
29057 gboolean _tmp767_;
29058 _tmp719_ = init;
29059 _tmp720_ = bala_member_initializer_get_symbol_reference (_tmp719_);
29060 _tmp721_ = _tmp720_;
29061 _tmp722_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp721_, BALA_TYPE_PROPERTY, BalaProperty)(((BalaProperty*) g_type_check_instance_cast ((GTypeInstance*
) (_tmp721_), ((bala_property_get_type ())))))
);
29062 p = _tmp722_;
29063 _tmp723_ = p;
29064 _tmp724_ = bala_property_get_base_property (_tmp723_);
29065 _tmp725_ = _tmp724_;
29066 if (_tmp725_ != NULL((void*)0)) {
29067 BalaProperty* _tmp726_;
29068 BalaProperty* _tmp727_;
29069 BalaProperty* _tmp728_;
29070 BalaProperty* _tmp729_;
29071 _tmp726_ = p;
29072 _tmp727_ = bala_property_get_base_property (_tmp726_);
29073 _tmp728_ = _tmp727_;
29074 _tmp729_ = _bala_code_node_ref0 (_tmp728_);
29075 _bala_code_node_unref0 (p)((p == ((void*)0)) ? ((void*)0) : (p = (bala_code_node_unref (
p), ((void*)0))))
;
29076 p = _tmp729_;
29077 } else {
29078 BalaProperty* _tmp730_;
29079 BalaProperty* _tmp731_;
29080 BalaProperty* _tmp732_;
29081 _tmp730_ = p;
29082 _tmp731_ = bala_property_get_base_interface_property (_tmp730_);
29083 _tmp732_ = _tmp731_;
29084 if (_tmp732_ != NULL((void*)0)) {
29085 BalaProperty* _tmp733_;
29086 BalaProperty* _tmp734_;
29087 BalaProperty* _tmp735_;
29088 BalaProperty* _tmp736_;
29089 _tmp733_ = p;
29090 _tmp734_ = bala_property_get_base_interface_property (_tmp733_);
29091 _tmp735_ = _tmp734_;
29092 _tmp736_ = _bala_code_node_ref0 (_tmp735_);
29093 _bala_code_node_unref0 (p)((p == ((void*)0)) ? ((void*)0) : (p = (bala_code_node_unref (
p), ((void*)0))))
;
29094 p = _tmp736_;
29095 }
29096 }
29097 _tmp737_ = p;
29098 _tmp738_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp737_);
29099 _tmp739_ = _tmp738_;
29100 _tmp740_ = bala_semantic_analyzer_get_data_type_for_symbol ((BalaSymbol*) G_TYPE_CHECK_INSTANCE_CAST (_tmp739_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp739_), ((bala_typesymbol_get_type ())))))
);
29101 instance_target_type = _tmp740_;
29102 _tmp741_ = bala_object_creation_expression_get_type_reference (expr);
29103 _tmp742_ = _tmp741_;
29104 _tmp743_ = instance;
29105 _tmp744_ = bala_glib_value_new (_tmp742_, _tmp743_, FALSE(0));
29106 _tmp745_ = _tmp744_;
29107 _tmp746_ = instance_target_type;
29108 _tmp747_ = init;
29109 _tmp748_ = bala_ccode_base_module_transform_value (self, (BalaTargetValue*) _tmp745_, _tmp746_, (BalaCodeNode*) _tmp747_);
29110 _tmp749_ = _tmp748_;
29111 _bala_target_value_unref0 (_tmp745_)((_tmp745_ == ((void*)0)) ? ((void*)0) : (_tmp745_ = (bala_target_value_unref
(_tmp745_), ((void*)0))))
;
29112 typed_inst = _tmp749_;
29113 _tmp750_ = bala_member_access_new_simple ("fake", NULL((void*)0));
29114 inst_ma = _tmp750_;
29115 _tmp751_ = inst_ma;
29116 _tmp752_ = typed_inst;
29117 bala_expression_set_target_value ((BalaExpression*) _tmp751_, _tmp752_);
29118 _tmp753_ = p;
29119 _tmp754_ = inst_ma;
29120 _tmp755_ = init;
29121 _tmp756_ = bala_member_initializer_get_initializer (_tmp755_);
29122 _tmp757_ = _tmp756_;
29123 _tmp758_ = bala_expression_get_target_value (_tmp757_);
29124 _tmp759_ = _tmp758_;
29125 bala_ccode_base_module_store_property (self, _tmp753_, (BalaExpression*) _tmp754_, _tmp759_);
29126 _tmp761_ = p;
29127 _tmp762_ = bala_property_get_set_accessor (_tmp761_);
29128 _tmp763_ = _tmp762_;
29129 _tmp764_ = bala_property_accessor_get_value_type (_tmp763_);
29130 _tmp765_ = _tmp764_;
29131 _tmp766_ = bala_data_type_get_value_owned (_tmp765_);
29132 _tmp767_ = _tmp766_;
29133 if (!_tmp767_) {
29134 BalaMemberInitializer* _tmp768_;
29135 BalaExpression* _tmp769_;
29136 BalaExpression* _tmp770_;
29137 BalaTargetValue* _tmp771_;
29138 BalaTargetValue* _tmp772_;
29139 BalaDataType* _tmp773_;
29140 BalaDataType* _tmp774_;
29141 _tmp768_ = init;
29142 _tmp769_ = bala_member_initializer_get_initializer (_tmp768_);
29143 _tmp770_ = _tmp769_;
29144 _tmp771_ = bala_expression_get_target_value (_tmp770_);
29145 _tmp772_ = _tmp771_;
29146 _tmp773_ = bala_target_value_get_value_type (_tmp772_);
29147 _tmp774_ = _tmp773_;
29148 _tmp760_ = bala_ccode_base_module_requires_destroy (_tmp774_);
29149 } else {
29150 _tmp760_ = FALSE(0);
29151 }
29152 if (_tmp760_) {
29153 BalaCCodeFunction* _tmp775_;
29154 BalaCCodeFunction* _tmp776_;
29155 BalaMemberInitializer* _tmp777_;
29156 BalaExpression* _tmp778_;
29157 BalaExpression* _tmp779_;
29158 BalaTargetValue* _tmp780_;
29159 BalaTargetValue* _tmp781_;
29160 BalaCCodeExpression* _tmp782_;
29161 BalaCCodeExpression* _tmp783_;
29162 _tmp775_ = bala_ccode_base_module_get_ccode (self);
29163 _tmp776_ = _tmp775_;
29164 _tmp777_ = init;
29165 _tmp778_ = bala_member_initializer_get_initializer (_tmp777_);
29166 _tmp779_ = _tmp778_;
29167 _tmp780_ = bala_expression_get_target_value (_tmp779_);
29168 _tmp781_ = _tmp780_;
29169 _tmp782_ = bala_ccode_base_module_destroy_value (self, _tmp781_, FALSE(0));
29170 _tmp783_ = _tmp782_;
29171 bala_ccode_function_add_expression (_tmp776_, _tmp783_);
29172 _bala_ccode_node_unref0 (_tmp783_)((_tmp783_ == ((void*)0)) ? ((void*)0) : (_tmp783_ = (bala_ccode_node_unref
(_tmp783_), ((void*)0))))
;
29173 }
29174 _bala_code_node_unref0 (inst_ma)((inst_ma == ((void*)0)) ? ((void*)0) : (inst_ma = (bala_code_node_unref
(inst_ma), ((void*)0))))
;
29175 _bala_target_value_unref0 (typed_inst)((typed_inst == ((void*)0)) ? ((void*)0) : (typed_inst = (bala_target_value_unref
(typed_inst), ((void*)0))))
;
29176 _bala_code_node_unref0 (instance_target_type)((instance_target_type == ((void*)0)) ? ((void*)0) : (instance_target_type
= (bala_code_node_unref (instance_target_type), ((void*)0)))
)
;
29177 _bala_code_node_unref0 (p)((p == ((void*)0)) ? ((void*)0) : (p = (bala_code_node_unref (
p), ((void*)0))))
;
29178 } else {
29179 BalaMemberInitializer* _tmp784_;
29180 BalaSourceReference* _tmp785_;
29181 BalaSourceReference* _tmp786_;
29182 _tmp784_ = init;
29183 _tmp785_ = bala_code_node_get_source_reference ((BalaCodeNode*) _tmp784_);
29184 _tmp786_ = _tmp785_;
29185 bala_report_error (_tmp786_, "internal: Unsupported symbol");
29186 }
29187 }
29188 _bala_code_node_unref0 (init)((init == ((void*)0)) ? ((void*)0) : (init = (bala_code_node_unref
(init), ((void*)0))))
;
29189 }
29190 _bala_iterable_unref0 (_init_list)((_init_list == ((void*)0)) ? ((void*)0) : (_init_list = (bala_iterable_unref
(_init_list), ((void*)0))))
;
29191 }
29192 _tmp787_ = instance;
29193 bala_set_cvalue ((BalaExpression*) expr, _tmp787_);
29194 } else {
29195 BalaCCodeExpression* _tmp788_;
29196 _tmp788_ = creation_expr;
29197 if (_tmp788_ != NULL((void*)0)) {
29198 BalaTargetValue* temp_value = NULL((void*)0);
29199 BalaDataType* _tmp789_;
29200 BalaDataType* _tmp790_;
29201 BalaTargetValue* _tmp791_;
29202 BalaCCodeFunction* _tmp792_;
29203 BalaCCodeFunction* _tmp793_;
29204 BalaTargetValue* _tmp794_;
29205 BalaCCodeExpression* _tmp795_;
29206 BalaCCodeExpression* _tmp796_;
29207 BalaTargetValue* _tmp797_;
29208 BalaClass* cl = NULL((void*)0);
29209 BalaDataType* _tmp798_;
29210 BalaDataType* _tmp799_;
29211 BalaTypeSymbol* _tmp800_;
29212 BalaTypeSymbol* _tmp801_;
29213 BalaCodeContext* _tmp802_;
29214 gboolean _tmp803_;
29215 gboolean _tmp804_;
29216 gboolean _tmp849_ = FALSE(0);
29217 BalaClass* _tmp850_;
29218 _tmp789_ = bala_expression_get_value_type ((BalaExpression*) expr);
29219 _tmp790_ = _tmp789_;
29220 _tmp791_ = bala_ccode_base_module_create_temp_value (self, _tmp790_, FALSE(0), (BalaCodeNode*) expr, NULL((void*)0));
29221 temp_value = _tmp791_;
29222 _tmp792_ = bala_ccode_base_module_get_ccode (self);
29223 _tmp793_ = _tmp792_;
29224 _tmp794_ = temp_value;
29225 _tmp795_ = bala_get_cvalue_ (_tmp794_);
29226 _tmp796_ = creation_expr;
29227 bala_ccode_function_add_assignment (_tmp793_, _tmp795_, _tmp796_);
29228 _tmp797_ = temp_value;
29229 bala_expression_set_target_value ((BalaExpression*) expr, _tmp797_);
29230 _tmp798_ = bala_object_creation_expression_get_type_reference (expr);
29231 _tmp799_ = _tmp798_;
29232 _tmp800_ = bala_data_type_get_type_symbol (_tmp799_);
29233 _tmp801_ = _tmp800_;
29234 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp801_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp801_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp801_) : NULL((void*)0);
29235 _tmp802_ = self->priv->_context;
29236 _tmp803_ = bala_code_context_get_gobject_tracing (_tmp802_);
29237 _tmp804_ = _tmp803_;
29238 if (_tmp804_) {
29239 gboolean _tmp805_ = FALSE(0);
29240 BalaClass* _tmp806_;
29241 _tmp806_ = cl;
29242 if (_tmp806_ != NULL((void*)0)) {
29243 BalaClass* _tmp807_;
29244 BalaTypeSymbol* _tmp808_;
29245 _tmp807_ = cl;
29246 _tmp808_ = self->gobject_type;
29247 _tmp805_ = bala_typesymbol_is_subtype_of ((BalaTypeSymbol*) _tmp807_, _tmp808_);
29248 } else {
29249 _tmp805_ = FALSE(0);
29250 }
29251 if (_tmp805_) {
29252 BalaCCodeFunction* _tmp809_;
29253 BalaCCodeFunction* _tmp810_;
29254 BalaTargetValue* _tmp811_;
29255 BalaTargetValue* _tmp812_;
29256 BalaCCodeExpression* _tmp813_;
29257 BalaCCodeFunctionCall* set_data_call = NULL((void*)0);
29258 BalaCCodeIdentifier* _tmp814_;
29259 BalaCCodeIdentifier* _tmp815_;
29260 BalaCCodeFunctionCall* _tmp816_;
29261 BalaCCodeFunctionCall* _tmp817_;
29262 BalaCCodeFunctionCall* _tmp818_;
29263 BalaTargetValue* _tmp819_;
29264 BalaTargetValue* _tmp820_;
29265 BalaCCodeExpression* _tmp821_;
29266 BalaCCodeCastExpression* _tmp822_;
29267 BalaCCodeCastExpression* _tmp823_;
29268 BalaCCodeFunctionCall* _tmp824_;
29269 BalaCCodeConstant* _tmp825_;
29270 BalaCCodeConstant* _tmp826_;
29271 gchar* func_name = NULL((void*)0);
29272 gchar* _tmp827_;
29273 BalaMethod* _tmp828_;
29274 BalaMethod* _tmp829_;
29275 BalaCCodeFunctionCall* _tmp838_;
29276 const gchar* _tmp839_;
29277 gchar* _tmp840_;
29278 gchar* _tmp841_;
29279 BalaCCodeConstant* _tmp842_;
29280 BalaCCodeConstant* _tmp843_;
29281 BalaCCodeFunction* _tmp844_;
29282 BalaCCodeFunction* _tmp845_;
29283 BalaCCodeFunctionCall* _tmp846_;
29284 BalaCCodeFunction* _tmp847_;
29285 BalaCCodeFunction* _tmp848_;
29286 _tmp809_ = bala_ccode_base_module_get_ccode (self);
29287 _tmp810_ = _tmp809_;
29288 _tmp811_ = bala_expression_get_target_value ((BalaExpression*) expr);
29289 _tmp812_ = _tmp811_;
29290 _tmp813_ = bala_get_cvalue_ (_tmp812_);
29291 bala_ccode_function_open_if (_tmp810_, _tmp813_);
29292 _tmp814_ = bala_ccode_identifier_new ("g_object_set_data");
29293 _tmp815_ = _tmp814_;
29294 _tmp816_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp815_);
29295 _tmp817_ = _tmp816_;
29296 _bala_ccode_node_unref0 (_tmp815_)((_tmp815_ == ((void*)0)) ? ((void*)0) : (_tmp815_ = (bala_ccode_node_unref
(_tmp815_), ((void*)0))))
;
29297 set_data_call = _tmp817_;
29298 _tmp818_ = set_data_call;
29299 _tmp819_ = bala_expression_get_target_value ((BalaExpression*) expr);
29300 _tmp820_ = _tmp819_;
29301 _tmp821_ = bala_get_cvalue_ (_tmp820_);
29302 _tmp822_ = bala_ccode_cast_expression_new (_tmp821_, "GObject *");
29303 _tmp823_ = _tmp822_;
29304 bala_ccode_function_call_add_argument (_tmp818_, (BalaCCodeExpression*) _tmp823_);
29305 _bala_ccode_node_unref0 (_tmp823_)((_tmp823_ == ((void*)0)) ? ((void*)0) : (_tmp823_ = (bala_ccode_node_unref
(_tmp823_), ((void*)0))))
;
29306 _tmp824_ = set_data_call;
29307 _tmp825_ = bala_ccode_constant_new ("\"bala-creation-function\"");
29308 _tmp826_ = _tmp825_;
29309 bala_ccode_function_call_add_argument (_tmp824_, (BalaCCodeExpression*) _tmp826_);
29310 _bala_ccode_node_unref0 (_tmp826_)((_tmp826_ == ((void*)0)) ? ((void*)0) : (_tmp826_ = (bala_ccode_node_unref
(_tmp826_), ((void*)0))))
;
29311 _tmp827_ = g_strdup ("");
29312 func_name = _tmp827_;
29313 _tmp828_ = bala_ccode_base_module_get_current_method (self);
29314 _tmp829_ = _tmp828_;
29315 if (_tmp829_ != NULL((void*)0)) {
29316 BalaMethod* _tmp830_;
29317 BalaMethod* _tmp831_;
29318 gchar* _tmp832_;
29319 _tmp830_ = bala_ccode_base_module_get_current_method (self);
29320 _tmp831_ = _tmp830_;
29321 _tmp832_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp831_);
29322 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
29323 func_name = _tmp832_;
29324 } else {
29325 BalaPropertyAccessor* _tmp833_;
29326 BalaPropertyAccessor* _tmp834_;
29327 _tmp833_ = bala_ccode_base_module_get_current_property_accessor (self);
29328 _tmp834_ = _tmp833_;
29329 if (_tmp834_ != NULL((void*)0)) {
29330 BalaPropertyAccessor* _tmp835_;
29331 BalaPropertyAccessor* _tmp836_;
29332 gchar* _tmp837_;
29333 _tmp835_ = bala_ccode_base_module_get_current_property_accessor (self);
29334 _tmp836_ = _tmp835_;
29335 _tmp837_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp836_);
29336 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
29337 func_name = _tmp837_;
29338 }
29339 }
29340 _tmp838_ = set_data_call;
29341 _tmp839_ = func_name;
29342 _tmp840_ = g_strdup_printf ("\"%s\"", _tmp839_);
29343 _tmp841_ = _tmp840_;
29344 _tmp842_ = bala_ccode_constant_new (_tmp841_);
29345 _tmp843_ = _tmp842_;
29346 bala_ccode_function_call_add_argument (_tmp838_, (BalaCCodeExpression*) _tmp843_);
29347 _bala_ccode_node_unref0 (_tmp843_)((_tmp843_ == ((void*)0)) ? ((void*)0) : (_tmp843_ = (bala_ccode_node_unref
(_tmp843_), ((void*)0))))
;
29348 _g_free0 (_tmp841_)(_tmp841_ = (g_free (_tmp841_), ((void*)0)));
29349 _tmp844_ = bala_ccode_base_module_get_ccode (self);
29350 _tmp845_ = _tmp844_;
29351 _tmp846_ = set_data_call;
29352 bala_ccode_function_add_expression (_tmp845_, (BalaCCodeExpression*) _tmp846_);
29353 _tmp847_ = bala_ccode_base_module_get_ccode (self);
29354 _tmp848_ = _tmp847_;
29355 bala_ccode_function_close (_tmp848_);
29356 _g_free0 (func_name)(func_name = (g_free (func_name), ((void*)0)));
29357 _bala_ccode_node_unref0 (set_data_call)((set_data_call == ((void*)0)) ? ((void*)0) : (set_data_call =
(bala_ccode_node_unref (set_data_call), ((void*)0))))
;
29358 }
29359 }
29360 _tmp850_ = cl;
29361 if (_tmp850_ != NULL((void*)0)) {
29362 BalaClass* _tmp851_;
29363 BalaTypeSymbol* _tmp852_;
29364 _tmp851_ = cl;
29365 _tmp852_ = self->garray_type;
29366 _tmp849_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp851_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp851_), ((bala_typesymbol_get_type ())))))
== _tmp852_;
29367 } else {
29368 _tmp849_ = FALSE(0);
29369 }
29370 if (_tmp849_) {
29371 BalaDataType* type_arg = NULL((void*)0);
29372 BalaDataType* _tmp853_;
29373 BalaDataType* _tmp854_;
29374 BalaList* _tmp855_;
29375 gpointer _tmp856_;
29376 BalaDataType* _tmp857_;
29377 _tmp853_ = bala_object_creation_expression_get_type_reference (expr);
29378 _tmp854_ = _tmp853_;
29379 _tmp855_ = bala_data_type_get_type_arguments (_tmp854_);
29380 _tmp856_ = bala_list_get (_tmp855_, 0);
29381 type_arg = (BalaDataType*) _tmp856_;
29382 _tmp857_ = type_arg;
29383 if (bala_ccode_base_module_requires_destroy (_tmp857_)) {
29384 BalaCCodeFunctionCall* clear_func = NULL((void*)0);
29385 BalaCCodeIdentifier* _tmp858_;
29386 BalaCCodeIdentifier* _tmp859_;
29387 BalaCCodeFunctionCall* _tmp860_;
29388 BalaCCodeFunctionCall* _tmp861_;
29389 BalaCCodeFunctionCall* _tmp862_;
29390 BalaTargetValue* _tmp863_;
29391 BalaTargetValue* _tmp864_;
29392 BalaCCodeExpression* _tmp865_;
29393 gchar* destroy_func = NULL((void*)0);
29394 gboolean _tmp866_ = FALSE(0);
29395 BalaDataType* _tmp867_;
29396 BalaCCodeFunctionCall* _tmp875_;
29397 const gchar* _tmp876_;
29398 BalaCCodeIdentifier* _tmp877_;
29399 BalaCCodeIdentifier* _tmp878_;
29400 BalaCCodeCastExpression* _tmp879_;
29401 BalaCCodeCastExpression* _tmp880_;
29402 BalaCCodeFunction* _tmp881_;
29403 BalaCCodeFunction* _tmp882_;
29404 BalaCCodeFunctionCall* _tmp883_;
29405 _tmp858_ = bala_ccode_identifier_new ("g_array_set_clear_func");
29406 _tmp859_ = _tmp858_;
29407 _tmp860_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp859_);
29408 _tmp861_ = _tmp860_;
29409 _bala_ccode_node_unref0 (_tmp859_)((_tmp859_ == ((void*)0)) ? ((void*)0) : (_tmp859_ = (bala_ccode_node_unref
(_tmp859_), ((void*)0))))
;
29410 clear_func = _tmp861_;
29411 _tmp862_ = clear_func;
29412 _tmp863_ = bala_expression_get_target_value ((BalaExpression*) expr);
29413 _tmp864_ = _tmp863_;
29414 _tmp865_ = bala_get_cvalue_ (_tmp864_);
29415 bala_ccode_function_call_add_argument (_tmp862_, _tmp865_);
29416 _tmp867_ = type_arg;
29417 if (bala_data_type_is_non_null_simple_type (_tmp867_)) {
29418 _tmp866_ = TRUE(!(0));
29419 } else {
29420 BalaDataType* _tmp868_;
29421 _tmp868_ = type_arg;
29422 _tmp866_ = bala_data_type_is_real_non_null_struct_type (_tmp868_);
29423 }
29424 if (_tmp866_) {
29425 BalaDataType* _tmp869_;
29426 BalaTypeSymbol* _tmp870_;
29427 BalaTypeSymbol* _tmp871_;
29428 gchar* _tmp872_;
29429 _tmp869_ = type_arg;
29430 _tmp870_ = bala_data_type_get_type_symbol (_tmp869_);
29431 _tmp871_ = _tmp870_;
29432 _tmp872_ = bala_get_ccode_destroy_function (_tmp871_);
29433 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
29434 destroy_func = _tmp872_;
29435 } else {
29436 BalaDataType* _tmp873_;
29437 gchar* _tmp874_;
29438 _tmp873_ = type_arg;
29439 _tmp874_ = bala_ccode_base_module_generate_destroy_function_content_of_wrapper (self, _tmp873_);
29440 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
29441 destroy_func = _tmp874_;
29442 }
29443 _tmp875_ = clear_func;
29444 _tmp876_ = destroy_func;
29445 _tmp877_ = bala_ccode_identifier_new (_tmp876_);
29446 _tmp878_ = _tmp877_;
29447 _tmp879_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp878_, "GDestroyNotify");
29448 _tmp880_ = _tmp879_;
29449 bala_ccode_function_call_add_argument (_tmp875_, (BalaCCodeExpression*) _tmp880_);
29450 _bala_ccode_node_unref0 (_tmp880_)((_tmp880_ == ((void*)0)) ? ((void*)0) : (_tmp880_ = (bala_ccode_node_unref
(_tmp880_), ((void*)0))))
;
29451 _bala_ccode_node_unref0 (_tmp878_)((_tmp878_ == ((void*)0)) ? ((void*)0) : (_tmp878_ = (bala_ccode_node_unref
(_tmp878_), ((void*)0))))
;
29452 _tmp881_ = bala_ccode_base_module_get_ccode (self);
29453 _tmp882_ = _tmp881_;
29454 _tmp883_ = clear_func;
29455 bala_ccode_function_add_expression (_tmp882_, (BalaCCodeExpression*) _tmp883_);
29456 _g_free0 (destroy_func)(destroy_func = (g_free (destroy_func), ((void*)0)));
29457 _bala_ccode_node_unref0 (clear_func)((clear_func == ((void*)0)) ? ((void*)0) : (clear_func = (bala_ccode_node_unref
(clear_func), ((void*)0))))
;
29458 }
29459 _bala_code_node_unref0 (type_arg)((type_arg == ((void*)0)) ? ((void*)0) : (type_arg = (bala_code_node_unref
(type_arg), ((void*)0))))
;
29460 }
29461 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
29462 }
29463 }
29464 }
29465 _tmp884_ = bala_expression_get_target_value ((BalaExpression*) expr);
29466 _tmp885_ = _tmp884_;
29467 G_TYPE_CHECK_INSTANCE_CAST (_tmp885_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp885_), ((bala_glib_value_get_type ())))))
->lvalue = TRUE(!(0));
29468 _bala_code_node_unref0 (local)((local == ((void*)0)) ? ((void*)0) : (local = (bala_code_node_unref
(local), ((void*)0))))
;
29469 _bala_ccode_node_unref0 (creation_expr)((creation_expr == ((void*)0)) ? ((void*)0) : (creation_expr =
(bala_ccode_node_unref (creation_expr), ((void*)0))))
;
29470 _bala_ccode_node_unref0 (instance)((instance == ((void*)0)) ? ((void*)0) : (instance = (bala_ccode_node_unref
(instance), ((void*)0))))
;
29471}
29472
29473BalaCCodeExpression*
29474bala_ccode_base_module_handle_struct_argument (BalaCCodeBaseModule* self,
29475 BalaParameter* param,
29476 BalaExpression* arg,
29477 BalaCCodeExpression* cexpr)
29478{
29479 BalaDataType* type = NULL((void*)0);
29480 BalaUnaryExpression* unary = NULL((void*)0);
29481 BalaUnaryExpression* _tmp6_;
29482 gboolean _tmp7_ = FALSE(0);
29483 BalaDataType* _tmp8_;
29484 BalaDataType* _tmp9_;
29485 BalaCCodeExpression* _tmp35_;
29486 BalaCCodeExpression* result = NULL((void*)0);
29487 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
29488 g_return_val_if_fail (arg != NULL, NULL)do { if ((arg != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "arg != NULL")
; return (((void*)0)); } } while (0)
;
29489 if (param != NULL((void*)0)) {
29490 BalaDataType* _tmp0_;
29491 BalaDataType* _tmp1_;
29492 BalaDataType* _tmp2_;
29493 _tmp0_ = bala_variable_get_variable_type ((BalaVariable*) param);
29494 _tmp1_ = _tmp0_;
29495 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
29496 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
29497 type = _tmp2_;
29498 } else {
29499 BalaDataType* _tmp3_;
29500 BalaDataType* _tmp4_;
29501 BalaDataType* _tmp5_;
29502 _tmp3_ = bala_expression_get_value_type (arg);
29503 _tmp4_ = _tmp3_;
29504 _tmp5_ = _bala_code_node_ref0 (_tmp4_);
29505 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
29506 type = _tmp5_;
29507 }
29508 _tmp6_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (arg, BALA_TYPE_UNARY_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
arg); GType __t = ((bala_unary_expression_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaUnaryExpression*) arg) : NULL((void*)0));
29509 unary = _tmp6_;
29510 _tmp8_ = bala_expression_get_value_type (arg);
29511 _tmp9_ = _tmp8_;
29512 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp9_, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp9_); GType __t = ((bala_null_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
29513 BalaDataType* _tmp10_;
29514 _tmp10_ = type;
29515 _tmp7_ = bala_data_type_is_real_struct_type (_tmp10_);
29516 } else {
29517 _tmp7_ = FALSE(0);
29518 }
29519 if (_tmp7_) {
29520 gboolean _tmp11_ = FALSE(0);
29521 gboolean _tmp12_ = FALSE(0);
29522 BalaUnaryExpression* _tmp13_;
29523 _tmp13_ = unary;
29524 if (_tmp13_ != NULL((void*)0)) {
29525 gboolean _tmp14_ = FALSE(0);
29526 BalaUnaryExpression* _tmp15_;
29527 BalaUnaryOperator _tmp16_;
29528 BalaUnaryOperator _tmp17_;
29529 _tmp15_ = unary;
29530 _tmp16_ = bala_unary_expression_get_operator (_tmp15_);
29531 _tmp17_ = _tmp16_;
29532 if (_tmp17_ == BALA_UNARY_OPERATOR_OUT) {
29533 _tmp14_ = TRUE(!(0));
29534 } else {
29535 BalaUnaryExpression* _tmp18_;
29536 BalaUnaryOperator _tmp19_;
29537 BalaUnaryOperator _tmp20_;
29538 _tmp18_ = unary;
29539 _tmp19_ = bala_unary_expression_get_operator (_tmp18_);
29540 _tmp20_ = _tmp19_;
29541 _tmp14_ = _tmp20_ == BALA_UNARY_OPERATOR_REF;
29542 }
29543 _tmp12_ = _tmp14_;
29544 } else {
29545 _tmp12_ = FALSE(0);
29546 }
29547 if (!_tmp12_) {
29548 BalaDataType* _tmp21_;
29549 gboolean _tmp22_;
29550 gboolean _tmp23_;
29551 _tmp21_ = type;
29552 _tmp22_ = bala_data_type_get_nullable (_tmp21_);
29553 _tmp23_ = _tmp22_;
29554 _tmp11_ = !_tmp23_;
29555 } else {
29556 _tmp11_ = FALSE(0);
29557 }
29558 if (_tmp11_) {
29559 gboolean _tmp24_ = FALSE(0);
29560 if (G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_identifier_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
29561 _tmp24_ = TRUE(!(0));
29562 } else {
29563 _tmp24_ = G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_MEMBER_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_member_access_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
;
29564 }
29565 if (_tmp24_) {
29566 BalaCCodeUnaryExpression* _tmp25_;
29567 _tmp25_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, cexpr);
29568 result = (BalaCCodeExpression*) _tmp25_;
29569 _bala_code_node_unref0 (unary)((unary == ((void*)0)) ? ((void*)0) : (unary = (bala_code_node_unref
(unary), ((void*)0))))
;
29570 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
29571 return result;
29572 } else {
29573 BalaTargetValue* temp_value = NULL((void*)0);
29574 BalaDataType* _tmp26_;
29575 BalaTargetValue* _tmp27_;
29576 BalaCCodeFunction* _tmp28_;
29577 BalaCCodeFunction* _tmp29_;
29578 BalaTargetValue* _tmp30_;
29579 BalaCCodeExpression* _tmp31_;
29580 BalaTargetValue* _tmp32_;
29581 BalaCCodeExpression* _tmp33_;
29582 BalaCCodeUnaryExpression* _tmp34_;
29583 _tmp26_ = type;
29584 _tmp27_ = bala_ccode_base_module_create_temp_value (self, _tmp26_, FALSE(0), (BalaCodeNode*) arg, NULL((void*)0));
29585 temp_value = _tmp27_;
29586 _tmp28_ = bala_ccode_base_module_get_ccode (self);
29587 _tmp29_ = _tmp28_;
29588 _tmp30_ = temp_value;
29589 _tmp31_ = bala_get_cvalue_ (_tmp30_);
29590 bala_ccode_function_add_assignment (_tmp29_, _tmp31_, cexpr);
29591 _tmp32_ = temp_value;
29592 _tmp33_ = bala_get_cvalue_ (_tmp32_);
29593 _tmp34_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp33_);
29594 result = (BalaCCodeExpression*) _tmp34_;
29595 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
29596 _bala_code_node_unref0 (unary)((unary == ((void*)0)) ? ((void*)0) : (unary = (bala_code_node_unref
(unary), ((void*)0))))
;
29597 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
29598 return result;
29599 }
29600 }
29601 }
29602 _tmp35_ = _bala_ccode_node_ref0 (cexpr);
29603 result = _tmp35_;
29604 _bala_code_node_unref0 (unary)((unary == ((void*)0)) ? ((void*)0) : (unary = (bala_code_node_unref
(unary), ((void*)0))))
;
29605 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
29606 return result;
29607}
29608
29609static void
29610bala_ccode_base_module_real_visit_sizeof_expression (BalaCodeVisitor* base,
29611 BalaSizeofExpression* expr)
29612{
29613 BalaCCodeBaseModule * self;
29614 BalaDataType* _tmp0_;
29615 BalaDataType* _tmp1_;
29616 BalaCCodeFile* _tmp2_;
29617 BalaCCodeFunctionCall* csizeof = NULL((void*)0);
29618 BalaCCodeIdentifier* _tmp3_;
29619 BalaCCodeIdentifier* _tmp4_;
29620 BalaCCodeFunctionCall* _tmp5_;
29621 BalaCCodeFunctionCall* _tmp6_;
29622 BalaDataType* _tmp7_;
29623 BalaDataType* _tmp8_;
29624 gchar* _tmp9_;
29625 gchar* _tmp10_;
29626 BalaCCodeIdentifier* _tmp11_;
29627 BalaCCodeIdentifier* _tmp12_;
29628 self = (BalaCCodeBaseModule*) base;
29629 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
29630 _tmp0_ = bala_sizeof_expression_get_type_reference (expr);
29631 _tmp1_ = _tmp0_;
29632 _tmp2_ = self->cfile;
29633 bala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
29634 _tmp3_ = bala_ccode_identifier_new ("sizeof");
29635 _tmp4_ = _tmp3_;
29636 _tmp5_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp4_);
29637 _tmp6_ = _tmp5_;
29638 _bala_ccode_node_unref0 (_tmp4_)((_tmp4_ == ((void*)0)) ? ((void*)0) : (_tmp4_ = (bala_ccode_node_unref
(_tmp4_), ((void*)0))))
;
29639 csizeof = _tmp6_;
29640 _tmp7_ = bala_sizeof_expression_get_type_reference (expr);
29641 _tmp8_ = _tmp7_;
29642 _tmp9_ = bala_get_ccode_name ((BalaCodeNode*) _tmp8_);
29643 _tmp10_ = _tmp9_;
29644 _tmp11_ = bala_ccode_identifier_new (_tmp10_);
29645 _tmp12_ = _tmp11_;
29646 bala_ccode_function_call_add_argument (csizeof, (BalaCCodeExpression*) _tmp12_);
29647 _bala_ccode_node_unref0 (_tmp12_)((_tmp12_ == ((void*)0)) ? ((void*)0) : (_tmp12_ = (bala_ccode_node_unref
(_tmp12_), ((void*)0))))
;
29648 _g_free0 (_tmp10_)(_tmp10_ = (g_free (_tmp10_), ((void*)0)));
29649 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) csizeof);
29650 _bala_ccode_node_unref0 (csizeof)((csizeof == ((void*)0)) ? ((void*)0) : (csizeof = (bala_ccode_node_unref
(csizeof), ((void*)0))))
;
29651}
29652
29653static void
29654bala_ccode_base_module_real_visit_typeof_expression (BalaCodeVisitor* base,
29655 BalaTypeofExpression* expr)
29656{
29657 BalaCCodeBaseModule * self;
29658 BalaCCodeFile* _tmp0_;
29659 BalaDataType* _tmp1_;
29660 BalaDataType* _tmp2_;
29661 BalaCCodeExpression* _tmp3_;
29662 BalaCCodeExpression* _tmp4_;
29663 self = (BalaCCodeBaseModule*) base;
29664 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
29665 _tmp0_ = self->cfile;
29666 bala_ccode_file_add_include (_tmp0_, "glib-object.h", FALSE(0));
29667 _tmp1_ = bala_typeof_expression_get_type_reference (expr);
29668 _tmp2_ = _tmp1_;
29669 _tmp3_ = bala_ccode_base_module_get_type_id_expression (self, _tmp2_, FALSE(0));
29670 _tmp4_ = _tmp3_;
29671 bala_set_cvalue ((BalaExpression*) expr, _tmp4_);
29672 _bala_ccode_node_unref0 (_tmp4_)((_tmp4_ == ((void*)0)) ? ((void*)0) : (_tmp4_ = (bala_ccode_node_unref
(_tmp4_), ((void*)0))))
;
29673}
29674
29675static void
29676bala_ccode_base_module_real_visit_unary_expression (BalaCodeVisitor* base,
29677 BalaUnaryExpression* expr)
29678{
29679 BalaCCodeBaseModule * self;
29680 gboolean _tmp0_ = FALSE(0);
29681 BalaUnaryOperator _tmp1_;
29682 BalaUnaryOperator _tmp2_;
29683 gboolean _tmp66_ = FALSE(0);
29684 BalaUnaryOperator _tmp67_;
29685 BalaUnaryOperator _tmp68_;
29686 BalaCCodeUnaryOperator op = 0;
29687 BalaUnaryOperator _tmp109_;
29688 BalaUnaryOperator _tmp110_;
29689 BalaCCodeUnaryOperator _tmp111_;
29690 BalaExpression* _tmp112_;
29691 BalaExpression* _tmp113_;
29692 BalaCCodeExpression* _tmp114_;
29693 BalaCCodeUnaryExpression* _tmp115_;
29694 BalaCCodeUnaryExpression* _tmp116_;
29695 self = (BalaCCodeBaseModule*) base;
29696 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
29697 _tmp1_ = bala_unary_expression_get_operator (expr);
29698 _tmp2_ = _tmp1_;
29699 if (_tmp2_ == BALA_UNARY_OPERATOR_REF) {
29700 _tmp0_ = TRUE(!(0));
29701 } else {
29702 BalaUnaryOperator _tmp3_;
29703 BalaUnaryOperator _tmp4_;
29704 _tmp3_ = bala_unary_expression_get_operator (expr);
29705 _tmp4_ = _tmp3_;
29706 _tmp0_ = _tmp4_ == BALA_UNARY_OPERATOR_OUT;
29707 }
29708 if (_tmp0_) {
29709 BalaGLibValue* glib_value = NULL((void*)0);
29710 BalaExpression* _tmp5_;
29711 BalaExpression* _tmp6_;
29712 BalaTargetValue* _tmp7_;
29713 BalaTargetValue* _tmp8_;
29714 BalaGLibValue* _tmp9_;
29715 BalaGLibValue* ref_value = NULL((void*)0);
29716 BalaGLibValue* _tmp10_;
29717 BalaDataType* _tmp11_;
29718 BalaDataType* _tmp12_;
29719 BalaGLibValue* _tmp13_;
29720 gboolean _tmp14_ = FALSE(0);
29721 gboolean _tmp15_ = FALSE(0);
29722 BalaDataType* _tmp16_;
29723 BalaDataType* _tmp17_;
29724 BalaGLibValue* _tmp38_;
29725 BalaList* _tmp39_;
29726 BalaGLibValue* _tmp53_;
29727 BalaCCodeExpression* _tmp54_;
29728 BalaGLibValue* _tmp59_;
29729 BalaCCodeExpression* _tmp60_;
29730 BalaGLibValue* _tmp65_;
29731 _tmp5_ = bala_unary_expression_get_inner (expr);
29732 _tmp6_ = _tmp5_;
29733 _tmp7_ = bala_expression_get_target_value (_tmp6_);
29734 _tmp8_ = _tmp7_;
29735 _tmp9_ = _bala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp8_), ((bala_glib_value_get_type ())))))
);
29736 glib_value = _tmp9_;
29737 _tmp10_ = glib_value;
29738 _tmp11_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp10_);
29739 _tmp12_ = _tmp11_;
29740 _tmp13_ = bala_glib_value_new (_tmp12_, NULL((void*)0), FALSE(0));
29741 ref_value = _tmp13_;
29742 _tmp16_ = bala_expression_get_target_type ((BalaExpression*) expr);
29743 _tmp17_ = _tmp16_;
29744 if (_tmp17_ != NULL((void*)0)) {
29745 BalaGLibValue* _tmp18_;
29746 BalaDataType* _tmp19_;
29747 BalaDataType* _tmp20_;
29748 _tmp18_ = glib_value;
29749 _tmp19_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp18_);
29750 _tmp20_ = _tmp19_;
29751 _tmp15_ = bala_data_type_is_real_struct_type (_tmp20_);
29752 } else {
29753 _tmp15_ = FALSE(0);
29754 }
29755 if (_tmp15_) {
29756 BalaGLibValue* _tmp21_;
29757 BalaDataType* _tmp22_;
29758 BalaDataType* _tmp23_;
29759 gboolean _tmp24_;
29760 gboolean _tmp25_;
29761 BalaDataType* _tmp26_;
29762 BalaDataType* _tmp27_;
29763 gboolean _tmp28_;
29764 gboolean _tmp29_;
29765 _tmp21_ = glib_value;
29766 _tmp22_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp21_);
29767 _tmp23_ = _tmp22_;
29768 _tmp24_ = bala_data_type_get_nullable (_tmp23_);
29769 _tmp25_ = _tmp24_;
29770 _tmp26_ = bala_expression_get_target_type ((BalaExpression*) expr);
29771 _tmp27_ = _tmp26_;
29772 _tmp28_ = bala_data_type_get_nullable (_tmp27_);
29773 _tmp29_ = _tmp28_;
29774 _tmp14_ = _tmp25_ != _tmp29_;
29775 } else {
29776 _tmp14_ = FALSE(0);
29777 }
29778 if (_tmp14_) {
29779 BalaGLibValue* _tmp30_;
29780 BalaGLibValue* _tmp31_;
29781 BalaCCodeExpression* _tmp32_;
29782 BalaCCodeExpression* _tmp33_;
29783 _tmp30_ = ref_value;
29784 _tmp31_ = glib_value;
29785 _tmp32_ = _tmp31_->cvalue;
29786 _tmp33_ = _bala_ccode_node_ref0 (_tmp32_);
29787 _bala_ccode_node_unref0 (_tmp30_->cvalue)((_tmp30_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp30_->
cvalue = (bala_ccode_node_unref (_tmp30_->cvalue), ((void*
)0))))
;
29788 _tmp30_->cvalue = _tmp33_;
29789 } else {
29790 BalaGLibValue* _tmp34_;
29791 BalaGLibValue* _tmp35_;
29792 BalaCCodeExpression* _tmp36_;
29793 BalaCCodeUnaryExpression* _tmp37_;
29794 _tmp34_ = ref_value;
29795 _tmp35_ = glib_value;
29796 _tmp36_ = _tmp35_->cvalue;
29797 _tmp37_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp36_);
29798 _bala_ccode_node_unref0 (_tmp34_->cvalue)((_tmp34_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp34_->
cvalue = (bala_ccode_node_unref (_tmp34_->cvalue), ((void*
)0))))
;
29799 _tmp34_->cvalue = (BalaCCodeExpression*) _tmp37_;
29800 }
29801 _tmp38_ = glib_value;
29802 _tmp39_ = _tmp38_->array_length_cvalues;
29803 if (_tmp39_ != NULL((void*)0)) {
29804 {
29805 gint i = 0;
29806 i = 0;
29807 {
29808 gboolean _tmp40_ = FALSE(0);
29809 _tmp40_ = TRUE(!(0));
29810 while (TRUE(!(0))) {
29811 BalaGLibValue* _tmp42_;
29812 BalaList* _tmp43_;
29813 gint _tmp44_;
29814 gint _tmp45_;
29815 BalaGLibValue* _tmp46_;
29816 BalaGLibValue* _tmp47_;
29817 BalaList* _tmp48_;
29818 gpointer _tmp49_;
29819 BalaCCodeExpression* _tmp50_;
29820 BalaCCodeUnaryExpression* _tmp51_;
29821 BalaCCodeUnaryExpression* _tmp52_;
29822 if (!_tmp40_) {
29823 gint _tmp41_;
29824 _tmp41_ = i;
29825 i = _tmp41_ + 1;
29826 }
29827 _tmp40_ = FALSE(0);
29828 _tmp42_ = glib_value;
29829 _tmp43_ = _tmp42_->array_length_cvalues;
29830 _tmp44_ = bala_collection_get_size ((BalaCollection*) _tmp43_);
29831 _tmp45_ = _tmp44_;
29832 if (!(i < _tmp45_)) {
29833 break;
29834 }
29835 _tmp46_ = ref_value;
29836 _tmp47_ = glib_value;
29837 _tmp48_ = _tmp47_->array_length_cvalues;
29838 _tmp49_ = bala_list_get (_tmp48_, i);
29839 _tmp50_ = (BalaCCodeExpression*) _tmp49_;
29840 _tmp51_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp50_);
29841 _tmp52_ = _tmp51_;
29842 bala_glib_value_append_array_length_cvalue (_tmp46_, (BalaCCodeExpression*) _tmp52_);
29843 _bala_ccode_node_unref0 (_tmp52_)((_tmp52_ == ((void*)0)) ? ((void*)0) : (_tmp52_ = (bala_ccode_node_unref
(_tmp52_), ((void*)0))))
;
29844 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
29845 }
29846 }
29847 }
29848 }
29849 _tmp53_ = glib_value;
29850 _tmp54_ = _tmp53_->delegate_target_cvalue;
29851 if (_tmp54_ != NULL((void*)0)) {
29852 BalaGLibValue* _tmp55_;
29853 BalaGLibValue* _tmp56_;
29854 BalaCCodeExpression* _tmp57_;
29855 BalaCCodeUnaryExpression* _tmp58_;
29856 _tmp55_ = ref_value;
29857 _tmp56_ = glib_value;
29858 _tmp57_ = _tmp56_->delegate_target_cvalue;
29859 _tmp58_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp57_);
29860 _bala_ccode_node_unref0 (_tmp55_->delegate_target_cvalue)((_tmp55_->delegate_target_cvalue == ((void*)0)) ? ((void*
)0) : (_tmp55_->delegate_target_cvalue = (bala_ccode_node_unref
(_tmp55_->delegate_target_cvalue), ((void*)0))))
;
29861 _tmp55_->delegate_target_cvalue = (BalaCCodeExpression*) _tmp58_;
29862 }
29863 _tmp59_ = glib_value;
29864 _tmp60_ = _tmp59_->delegate_target_destroy_notify_cvalue;
29865 if (_tmp60_ != NULL((void*)0)) {
29866 BalaGLibValue* _tmp61_;
29867 BalaGLibValue* _tmp62_;
29868 BalaCCodeExpression* _tmp63_;
29869 BalaCCodeUnaryExpression* _tmp64_;
29870 _tmp61_ = ref_value;
29871 _tmp62_ = glib_value;
29872 _tmp63_ = _tmp62_->delegate_target_destroy_notify_cvalue;
29873 _tmp64_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp63_);
29874 _bala_ccode_node_unref0 (_tmp61_->delegate_target_destroy_notify_cvalue)((_tmp61_->delegate_target_destroy_notify_cvalue == ((void
*)0)) ? ((void*)0) : (_tmp61_->delegate_target_destroy_notify_cvalue
= (bala_ccode_node_unref (_tmp61_->delegate_target_destroy_notify_cvalue
), ((void*)0))))
;
29875 _tmp61_->delegate_target_destroy_notify_cvalue = (BalaCCodeExpression*) _tmp64_;
29876 }
29877 _tmp65_ = ref_value;
29878 bala_expression_set_target_value ((BalaExpression*) expr, (BalaTargetValue*) _tmp65_);
29879 _bala_target_value_unref0 (ref_value)((ref_value == ((void*)0)) ? ((void*)0) : (ref_value = (bala_target_value_unref
(ref_value), ((void*)0))))
;
29880 _bala_target_value_unref0 (glib_value)((glib_value == ((void*)0)) ? ((void*)0) : (glib_value = (bala_target_value_unref
(glib_value), ((void*)0))))
;
29881 return;
29882 }
29883 _tmp67_ = bala_unary_expression_get_operator (expr);
29884 _tmp68_ = _tmp67_;
29885 if (_tmp68_ == BALA_UNARY_OPERATOR_INCREMENT) {
29886 _tmp66_ = TRUE(!(0));
29887 } else {
29888 BalaUnaryOperator _tmp69_;
29889 BalaUnaryOperator _tmp70_;
29890 _tmp69_ = bala_unary_expression_get_operator (expr);
29891 _tmp70_ = _tmp69_;
29892 _tmp66_ = _tmp70_ == BALA_UNARY_OPERATOR_DECREMENT;
29893 }
29894 if (_tmp66_) {
29895 BalaCCodeBinaryOperator _tmp71_ = 0;
29896 BalaUnaryOperator _tmp72_;
29897 BalaUnaryOperator _tmp73_;
29898 BalaCCodeBinaryOperator op = 0;
29899 BalaCCodeBinaryExpression* cexpr = NULL((void*)0);
29900 BalaCCodeBinaryOperator _tmp74_;
29901 BalaExpression* _tmp75_;
29902 BalaExpression* _tmp76_;
29903 BalaTargetValue* _tmp77_;
29904 BalaTargetValue* _tmp78_;
29905 BalaCCodeExpression* _tmp79_;
29906 BalaCCodeConstant* _tmp80_;
29907 BalaCCodeConstant* _tmp81_;
29908 BalaCCodeBinaryExpression* _tmp82_;
29909 BalaCCodeBinaryExpression* _tmp83_;
29910 BalaCCodeFunction* _tmp84_;
29911 BalaCCodeFunction* _tmp85_;
29912 BalaExpression* _tmp86_;
29913 BalaExpression* _tmp87_;
29914 BalaCCodeExpression* _tmp88_;
29915 BalaCCodeBinaryExpression* _tmp89_;
29916 BalaTargetValue* temp_value = NULL((void*)0);
29917 BalaExpression* _tmp90_;
29918 BalaExpression* _tmp91_;
29919 BalaTargetValue* _tmp92_;
29920 BalaTargetValue* _tmp93_;
29921 BalaTargetValue* _tmp94_;
29922 BalaMemberAccess* ma = NULL((void*)0);
29923 BalaExpression* _tmp95_;
29924 BalaExpression* _tmp96_;
29925 BalaMemberAccess* _tmp97_;
29926 BalaMemberAccess* _tmp98_;
29927 BalaTargetValue* _tmp108_;
29928 _tmp72_ = bala_unary_expression_get_operator (expr);
29929 _tmp73_ = _tmp72_;
29930 if (_tmp73_ == BALA_UNARY_OPERATOR_INCREMENT) {
29931 _tmp71_ = BALA_CCODE_BINARY_OPERATOR_PLUS;
29932 } else {
29933 _tmp71_ = BALA_CCODE_BINARY_OPERATOR_MINUS;
29934 }
29935 op = _tmp71_;
29936 _tmp74_ = op;
29937 _tmp75_ = bala_unary_expression_get_inner (expr);
29938 _tmp76_ = _tmp75_;
29939 _tmp77_ = bala_expression_get_target_value (_tmp76_);
29940 _tmp78_ = _tmp77_;
29941 _tmp79_ = bala_get_cvalue_ (_tmp78_);
29942 _tmp80_ = bala_ccode_constant_new ("1");
29943 _tmp81_ = _tmp80_;
29944 _tmp82_ = bala_ccode_binary_expression_new (_tmp74_, _tmp79_, (BalaCCodeExpression*) _tmp81_);
29945 _tmp83_ = _tmp82_;
29946 _bala_ccode_node_unref0 (_tmp81_)((_tmp81_ == ((void*)0)) ? ((void*)0) : (_tmp81_ = (bala_ccode_node_unref
(_tmp81_), ((void*)0))))
;
29947 cexpr = _tmp83_;
29948 _tmp84_ = bala_ccode_base_module_get_ccode (self);
29949 _tmp85_ = _tmp84_;
29950 _tmp86_ = bala_unary_expression_get_inner (expr);
29951 _tmp87_ = _tmp86_;
29952 _tmp88_ = bala_get_cvalue (_tmp87_);
29953 _tmp89_ = cexpr;
29954 bala_ccode_function_add_assignment (_tmp85_, _tmp88_, (BalaCCodeExpression*) _tmp89_);
29955 _tmp90_ = bala_unary_expression_get_inner (expr);
29956 _tmp91_ = _tmp90_;
29957 _tmp92_ = bala_expression_get_target_value (_tmp91_);
29958 _tmp93_ = _tmp92_;
29959 _tmp94_ = bala_ccode_base_module_store_temp_value (self, _tmp93_, (BalaCodeNode*) expr, NULL((void*)0));
29960 temp_value = _tmp94_;
29961 _tmp95_ = bala_unary_expression_get_inner (expr);
29962 _tmp96_ = _tmp95_;
29963 _tmp97_ = bala_ccode_base_module_find_property_access (self, _tmp96_);
29964 ma = _tmp97_;
29965 _tmp98_ = ma;
29966 if (_tmp98_ != NULL((void*)0)) {
29967 BalaProperty* prop = NULL((void*)0);
29968 BalaMemberAccess* _tmp99_;
29969 BalaSymbol* _tmp100_;
29970 BalaSymbol* _tmp101_;
29971 BalaProperty* _tmp102_;
29972 BalaProperty* _tmp103_;
29973 BalaMemberAccess* _tmp104_;
29974 BalaExpression* _tmp105_;
29975 BalaExpression* _tmp106_;
29976 BalaTargetValue* _tmp107_;
29977 _tmp99_ = ma;
29978 _tmp100_ = bala_expression_get_symbol_reference ((BalaExpression*) _tmp99_);
29979 _tmp101_ = _tmp100_;
29980 _tmp102_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp101_, BALA_TYPE_PROPERTY, BalaProperty)(((BalaProperty*) g_type_check_instance_cast ((GTypeInstance*
) (_tmp101_), ((bala_property_get_type ())))))
);
29981 prop = _tmp102_;
29982 _tmp103_ = prop;
29983 _tmp104_ = ma;
29984 _tmp105_ = bala_member_access_get_inner (_tmp104_);
29985 _tmp106_ = _tmp105_;
29986 _tmp107_ = temp_value;
29987 bala_ccode_base_module_store_property (self, _tmp103_, _tmp106_, _tmp107_);
29988 _bala_code_node_unref0 (prop)((prop == ((void*)0)) ? ((void*)0) : (prop = (bala_code_node_unref
(prop), ((void*)0))))
;
29989 }
29990 _tmp108_ = temp_value;
29991 bala_expression_set_target_value ((BalaExpression*) expr, _tmp108_);
29992 _bala_code_node_unref0 (ma)((ma == ((void*)0)) ? ((void*)0) : (ma = (bala_code_node_unref
(ma), ((void*)0))))
;
29993 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
29994 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
29995 return;
29996 }
29997 _tmp109_ = bala_unary_expression_get_operator (expr);
29998 _tmp110_ = _tmp109_;
29999 switch (_tmp110_) {
30000 case BALA_UNARY_OPERATOR_PLUS:
30001 {
30002 op = BALA_CCODE_UNARY_OPERATOR_PLUS;
30003 break;
30004 }
30005 case BALA_UNARY_OPERATOR_MINUS:
30006 {
30007 op = BALA_CCODE_UNARY_OPERATOR_MINUS;
30008 break;
30009 }
30010 case BALA_UNARY_OPERATOR_LOGICAL_NEGATION:
30011 {
30012 op = BALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION;
30013 break;
30014 }
30015 case BALA_UNARY_OPERATOR_BITWISE_COMPLEMENT:
30016 {
30017 op = BALA_CCODE_UNARY_OPERATOR_BITWISE_COMPLEMENT;
30018 break;
30019 }
30020 case BALA_UNARY_OPERATOR_INCREMENT:
30021 {
30022 op = BALA_CCODE_UNARY_OPERATOR_PREFIX_INCREMENT;
30023 break;
30024 }
30025 case BALA_UNARY_OPERATOR_DECREMENT:
30026 {
30027 op = BALA_CCODE_UNARY_OPERATOR_PREFIX_DECREMENT;
30028 break;
30029 }
30030 default:
30031 {
30032 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 30032, ((const char*) (__func__)), ((void*)0)); } while (0)
;
30033 }
30034 }
30035 _tmp111_ = op;
30036 _tmp112_ = bala_unary_expression_get_inner (expr);
30037 _tmp113_ = _tmp112_;
30038 _tmp114_ = bala_get_cvalue (_tmp113_);
30039 _tmp115_ = bala_ccode_unary_expression_new (_tmp111_, _tmp114_);
30040 _tmp116_ = _tmp115_;
30041 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp116_);
30042 _bala_ccode_node_unref0 (_tmp116_)((_tmp116_ == ((void*)0)) ? ((void*)0) : (_tmp116_ = (bala_ccode_node_unref
(_tmp116_), ((void*)0))))
;
30043}
30044
30045static BalaCCodeExpression*
30046bala_ccode_base_module_real_deserialize_expression (BalaCCodeBaseModule* self,
30047 BalaDataType* type,
30048 BalaCCodeExpression* variant_expr,
30049 BalaCCodeExpression* expr,
30050 BalaCCodeExpression* error_expr,
30051 gboolean* may_fail)
30052{
30053 gboolean _bala_may_fail = FALSE(0);
30054 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
30055 g_return_val_if_fail (variant_expr != NULL, NULL)do { if ((variant_expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "variant_expr != NULL"
); return (((void*)0)); } } while (0)
;
30056 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 30056, ((const char*) (__func__)), ((void*)0)); } while (0)
;
30057 if (may_fail) {
30058 *may_fail = _bala_may_fail;
30059 }
30060}
30061
30062BalaCCodeExpression*
30063bala_ccode_base_module_deserialize_expression (BalaCCodeBaseModule* self,
30064 BalaDataType* type,
30065 BalaCCodeExpression* variant_expr,
30066 BalaCCodeExpression* expr,
30067 BalaCCodeExpression* error_expr,
30068 gboolean* may_fail)
30069{
30070 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
30071 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->deserialize_expression (self, type, variant_expr, expr, error_expr, may_fail);
30072}
30073
30074static BalaCCodeExpression*
30075bala_ccode_base_module_real_serialize_expression (BalaCCodeBaseModule* self,
30076 BalaDataType* type,
30077 BalaCCodeExpression* expr)
30078{
30079 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
30080 g_return_val_if_fail (expr != NULL, NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return (((void*)0)); } } while (0)
;
30081 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 30081, ((const char*) (__func__)), ((void*)0)); } while (0)
;
30082}
30083
30084BalaCCodeExpression*
30085bala_ccode_base_module_serialize_expression (BalaCCodeBaseModule* self,
30086 BalaDataType* type,
30087 BalaCCodeExpression* expr)
30088{
30089 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
30090 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->serialize_expression (self, type, expr);
30091}
30092
30093static void
30094bala_ccode_base_module_real_visit_cast_expression (BalaCodeVisitor* base,
30095 BalaCastExpression* expr)
30096{
30097 BalaCCodeBaseModule * self;
30098 gboolean _tmp0_;
30099 gboolean _tmp1_;
30100 BalaDataType* _tmp6_;
30101 BalaDataType* _tmp7_;
30102 BalaCCodeFile* _tmp8_;
30103 BalaArrayType* array_type = NULL((void*)0);
30104 BalaDataType* _tmp9_;
30105 BalaDataType* _tmp10_;
30106 BalaArrayType* _tmp11_;
30107 gboolean _tmp12_ = FALSE(0);
30108 BalaArrayType* _tmp13_;
30109 BalaCCodeExpression* innercexpr = NULL((void*)0);
30110 BalaExpression* _tmp138_;
30111 BalaExpression* _tmp139_;
30112 BalaCCodeExpression* _tmp140_;
30113 BalaCCodeExpression* _tmp141_;
30114 gboolean _tmp142_ = FALSE(0);
30115 gboolean _tmp143_ = FALSE(0);
30116 gboolean _tmp144_ = FALSE(0);
30117 BalaDataType* _tmp145_;
30118 BalaDataType* _tmp146_;
30119 BalaCCodeExpression* _tmp223_;
30120 BalaDataType* _tmp224_;
30121 BalaDataType* _tmp225_;
30122 gchar* _tmp226_;
30123 gchar* _tmp227_;
30124 BalaCCodeCastExpression* _tmp228_;
30125 BalaCCodeCastExpression* _tmp229_;
30126 BalaDataType* _tmp230_;
30127 BalaDataType* _tmp231_;
30128 self = (BalaCCodeBaseModule*) base;
30129 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
30130 _tmp0_ = bala_cast_expression_get_is_silent_cast (expr);
30131 _tmp1_ = _tmp0_;
30132 if (_tmp1_) {
30133 BalaCCodeInvalidExpression* _tmp2_;
30134 BalaCCodeInvalidExpression* _tmp3_;
30135 BalaSourceReference* _tmp4_;
30136 BalaSourceReference* _tmp5_;
30137 _tmp2_ = bala_ccode_invalid_expression_new ();
30138 _tmp3_ = _tmp2_;
30139 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp3_);
30140 _bala_ccode_node_unref0 (_tmp3_)((_tmp3_ == ((void*)0)) ? ((void*)0) : (_tmp3_ = (bala_ccode_node_unref
(_tmp3_), ((void*)0))))
;
30141 bala_code_node_set_error ((BalaCodeNode*) expr, TRUE(!(0)));
30142 _tmp4_ = bala_code_node_get_source_reference ((BalaCodeNode*) expr);
30143 _tmp5_ = _tmp4_;
30144 bala_report_error (_tmp5_, "Operation not supported for this type");
30145 return;
30146 }
30147 _tmp6_ = bala_cast_expression_get_type_reference (expr);
30148 _tmp7_ = _tmp6_;
30149 _tmp8_ = self->cfile;
30150 bala_ccode_base_module_generate_type_declaration (self, _tmp7_, _tmp8_);
30151 _tmp9_ = bala_cast_expression_get_type_reference (expr);
30152 _tmp10_ = _tmp9_;
30153 _tmp11_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp10_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp10_) : NULL((void*)0));
30154 array_type = _tmp11_;
30155 _tmp13_ = array_type;
30156 if (_tmp13_ != NULL((void*)0)) {
30157 BalaExpression* _tmp14_;
30158 BalaExpression* _tmp15_;
30159 BalaDataType* _tmp16_;
30160 BalaDataType* _tmp17_;
30161 _tmp14_ = bala_cast_expression_get_inner (expr);
30162 _tmp15_ = _tmp14_;
30163 _tmp16_ = bala_expression_get_value_type (_tmp15_);
30164 _tmp17_ = _tmp16_;
30165 _tmp12_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp17_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
30166 } else {
30167 _tmp12_ = FALSE(0);
30168 }
30169 if (_tmp12_) {
30170 gboolean _tmp18_ = FALSE(0);
30171 BalaArrayType* _tmp19_;
30172 BalaDataType* _tmp20_;
30173 BalaDataType* _tmp21_;
30174 _tmp19_ = array_type;
30175 _tmp20_ = bala_array_type_get_element_type (_tmp19_);
30176 _tmp21_ = _tmp20_;
30177 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp21_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp21_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30178 _tmp18_ = TRUE(!(0));
30179 } else {
30180 BalaExpression* _tmp22_;
30181 BalaExpression* _tmp23_;
30182 BalaDataType* _tmp24_;
30183 BalaDataType* _tmp25_;
30184 BalaDataType* _tmp26_;
30185 BalaDataType* _tmp27_;
30186 _tmp22_ = bala_cast_expression_get_inner (expr);
30187 _tmp23_ = _tmp22_;
30188 _tmp24_ = bala_expression_get_value_type (_tmp23_);
30189 _tmp25_ = _tmp24_;
30190 _tmp26_ = bala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp25_), ((bala_array_type_get_type ())))))
);
30191 _tmp27_ = _tmp26_;
30192 _tmp18_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp27_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp27_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
30193 }
30194 if (_tmp18_) {
30195 {
30196 gint dim = 0;
30197 dim = 1;
30198 {
30199 gboolean _tmp28_ = FALSE(0);
30200 _tmp28_ = TRUE(!(0));
30201 while (TRUE(!(0))) {
30202 BalaArrayType* _tmp30_;
30203 gint _tmp31_;
30204 gint _tmp32_;
30205 BalaExpression* _tmp33_;
30206 BalaExpression* _tmp34_;
30207 BalaCCodeExpression* _tmp35_;
30208 BalaCCodeExpression* _tmp36_;
30209 if (!_tmp28_) {
30210 gint _tmp29_;
30211 _tmp29_ = dim;
30212 dim = _tmp29_ + 1;
30213 }
30214 _tmp28_ = FALSE(0);
30215 _tmp30_ = array_type;
30216 _tmp31_ = bala_array_type_get_rank (_tmp30_);
30217 _tmp32_ = _tmp31_;
30218 if (!(dim <= _tmp32_)) {
30219 break;
30220 }
30221 _tmp33_ = bala_cast_expression_get_inner (expr);
30222 _tmp34_ = _tmp33_;
30223 _tmp35_ = bala_ccode_base_module_get_array_length_cexpression (self, _tmp34_, dim);
30224 _tmp36_ = _tmp35_;
30225 bala_append_array_length ((BalaExpression*) expr, _tmp36_);
30226 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
30227 }
30228 }
30229 }
30230 } else {
30231 BalaCCodeFunctionCall* sizeof_to = NULL((void*)0);
30232 BalaCCodeIdentifier* _tmp37_;
30233 BalaCCodeIdentifier* _tmp38_;
30234 BalaCCodeFunctionCall* _tmp39_;
30235 BalaCCodeFunctionCall* _tmp40_;
30236 BalaCCodeFunctionCall* _tmp41_;
30237 BalaArrayType* _tmp42_;
30238 BalaDataType* _tmp43_;
30239 BalaDataType* _tmp44_;
30240 gchar* _tmp45_;
30241 gchar* _tmp46_;
30242 BalaCCodeConstant* _tmp47_;
30243 BalaCCodeConstant* _tmp48_;
30244 BalaCCodeFunctionCall* sizeof_from = NULL((void*)0);
30245 BalaCCodeIdentifier* _tmp49_;
30246 BalaCCodeIdentifier* _tmp50_;
30247 BalaCCodeFunctionCall* _tmp51_;
30248 BalaCCodeFunctionCall* _tmp52_;
30249 BalaCCodeFunctionCall* _tmp53_;
30250 BalaExpression* _tmp54_;
30251 BalaExpression* _tmp55_;
30252 BalaDataType* _tmp56_;
30253 BalaDataType* _tmp57_;
30254 BalaDataType* _tmp58_;
30255 BalaDataType* _tmp59_;
30256 gchar* _tmp60_;
30257 gchar* _tmp61_;
30258 BalaCCodeConstant* _tmp62_;
30259 BalaCCodeConstant* _tmp63_;
30260 _tmp37_ = bala_ccode_identifier_new ("sizeof");
30261 _tmp38_ = _tmp37_;
30262 _tmp39_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp38_);
30263 _tmp40_ = _tmp39_;
30264 _bala_ccode_node_unref0 (_tmp38_)((_tmp38_ == ((void*)0)) ? ((void*)0) : (_tmp38_ = (bala_ccode_node_unref
(_tmp38_), ((void*)0))))
;
30265 sizeof_to = _tmp40_;
30266 _tmp41_ = sizeof_to;
30267 _tmp42_ = array_type;
30268 _tmp43_ = bala_array_type_get_element_type (_tmp42_);
30269 _tmp44_ = _tmp43_;
30270 _tmp45_ = bala_get_ccode_name ((BalaCodeNode*) _tmp44_);
30271 _tmp46_ = _tmp45_;
30272 _tmp47_ = bala_ccode_constant_new (_tmp46_);
30273 _tmp48_ = _tmp47_;
30274 bala_ccode_function_call_add_argument (_tmp41_, (BalaCCodeExpression*) _tmp48_);
30275 _bala_ccode_node_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_ccode_node_unref
(_tmp48_), ((void*)0))))
;
30276 _g_free0 (_tmp46_)(_tmp46_ = (g_free (_tmp46_), ((void*)0)));
30277 _tmp49_ = bala_ccode_identifier_new ("sizeof");
30278 _tmp50_ = _tmp49_;
30279 _tmp51_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp50_);
30280 _tmp52_ = _tmp51_;
30281 _bala_ccode_node_unref0 (_tmp50_)((_tmp50_ == ((void*)0)) ? ((void*)0) : (_tmp50_ = (bala_ccode_node_unref
(_tmp50_), ((void*)0))))
;
30282 sizeof_from = _tmp52_;
30283 _tmp53_ = sizeof_from;
30284 _tmp54_ = bala_cast_expression_get_inner (expr);
30285 _tmp55_ = _tmp54_;
30286 _tmp56_ = bala_expression_get_value_type (_tmp55_);
30287 _tmp57_ = _tmp56_;
30288 _tmp58_ = bala_array_type_get_element_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp57_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp57_), ((bala_array_type_get_type ())))))
);
30289 _tmp59_ = _tmp58_;
30290 _tmp60_ = bala_get_ccode_name ((BalaCodeNode*) _tmp59_);
30291 _tmp61_ = _tmp60_;
30292 _tmp62_ = bala_ccode_constant_new (_tmp61_);
30293 _tmp63_ = _tmp62_;
30294 bala_ccode_function_call_add_argument (_tmp53_, (BalaCCodeExpression*) _tmp63_);
30295 _bala_ccode_node_unref0 (_tmp63_)((_tmp63_ == ((void*)0)) ? ((void*)0) : (_tmp63_ = (bala_ccode_node_unref
(_tmp63_), ((void*)0))))
;
30296 _g_free0 (_tmp61_)(_tmp61_ = (g_free (_tmp61_), ((void*)0)));
30297 {
30298 gint dim = 0;
30299 dim = 1;
30300 {
30301 gboolean _tmp64_ = FALSE(0);
30302 _tmp64_ = TRUE(!(0));
30303 while (TRUE(!(0))) {
30304 BalaArrayType* _tmp66_;
30305 gint _tmp67_;
30306 gint _tmp68_;
30307 BalaExpression* _tmp69_;
30308 BalaExpression* _tmp70_;
30309 BalaCCodeExpression* _tmp71_;
30310 BalaCCodeExpression* _tmp72_;
30311 BalaCCodeFunctionCall* _tmp73_;
30312 BalaCCodeBinaryExpression* _tmp74_;
30313 BalaCCodeBinaryExpression* _tmp75_;
30314 BalaCCodeFunctionCall* _tmp76_;
30315 BalaCCodeBinaryExpression* _tmp77_;
30316 BalaCCodeBinaryExpression* _tmp78_;
30317 if (!_tmp64_) {
30318 gint _tmp65_;
30319 _tmp65_ = dim;
30320 dim = _tmp65_ + 1;
30321 }
30322 _tmp64_ = FALSE(0);
30323 _tmp66_ = array_type;
30324 _tmp67_ = bala_array_type_get_rank (_tmp66_);
30325 _tmp68_ = _tmp67_;
30326 if (!(dim <= _tmp68_)) {
30327 break;
30328 }
30329 _tmp69_ = bala_cast_expression_get_inner (expr);
30330 _tmp70_ = _tmp69_;
30331 _tmp71_ = bala_ccode_base_module_get_array_length_cexpression (self, _tmp70_, dim);
30332 _tmp72_ = _tmp71_;
30333 _tmp73_ = sizeof_from;
30334 _tmp74_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_MUL, _tmp72_, (BalaCCodeExpression*) _tmp73_);
30335 _tmp75_ = _tmp74_;
30336 _tmp76_ = sizeof_to;
30337 _tmp77_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_DIV, (BalaCCodeExpression*) _tmp75_, (BalaCCodeExpression*) _tmp76_);
30338 _tmp78_ = _tmp77_;
30339 bala_append_array_length ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp78_);
30340 _bala_ccode_node_unref0 (_tmp78_)((_tmp78_ == ((void*)0)) ? ((void*)0) : (_tmp78_ = (bala_ccode_node_unref
(_tmp78_), ((void*)0))))
;
30341 _bala_ccode_node_unref0 (_tmp75_)((_tmp75_ == ((void*)0)) ? ((void*)0) : (_tmp75_ = (bala_ccode_node_unref
(_tmp75_), ((void*)0))))
;
30342 _bala_ccode_node_unref0 (_tmp72_)((_tmp72_ == ((void*)0)) ? ((void*)0) : (_tmp72_ = (bala_ccode_node_unref
(_tmp72_), ((void*)0))))
;
30343 }
30344 }
30345 }
30346 _bala_ccode_node_unref0 (sizeof_from)((sizeof_from == ((void*)0)) ? ((void*)0) : (sizeof_from = (bala_ccode_node_unref
(sizeof_from), ((void*)0))))
;
30347 _bala_ccode_node_unref0 (sizeof_to)((sizeof_to == ((void*)0)) ? ((void*)0) : (sizeof_to = (bala_ccode_node_unref
(sizeof_to), ((void*)0))))
;
30348 }
30349 } else {
30350 BalaArrayType* _tmp79_;
30351 _tmp79_ = array_type;
30352 if (_tmp79_ != NULL((void*)0)) {
30353 BalaCCodeExpression* array_length_expr = NULL((void*)0);
30354 BalaCCodeFunctionCall* sizeof_to = NULL((void*)0);
30355 BalaCCodeIdentifier* _tmp80_;
30356 BalaCCodeIdentifier* _tmp81_;
30357 BalaCCodeFunctionCall* _tmp82_;
30358 BalaCCodeFunctionCall* _tmp83_;
30359 BalaCCodeFunctionCall* _tmp84_;
30360 BalaArrayType* _tmp85_;
30361 BalaDataType* _tmp86_;
30362 BalaDataType* _tmp87_;
30363 gchar* _tmp88_;
30364 gchar* _tmp89_;
30365 BalaCCodeConstant* _tmp90_;
30366 BalaCCodeConstant* _tmp91_;
30367 BalaCCodeFunctionCall* sizeof_from = NULL((void*)0);
30368 BalaCCodeIdentifier* _tmp92_;
30369 BalaCCodeIdentifier* _tmp93_;
30370 BalaCCodeFunctionCall* _tmp94_;
30371 BalaCCodeFunctionCall* _tmp95_;
30372 BalaDataType* value_type = NULL((void*)0);
30373 BalaExpression* _tmp96_;
30374 BalaExpression* _tmp97_;
30375 BalaDataType* _tmp98_;
30376 BalaDataType* _tmp99_;
30377 BalaDataType* _tmp100_;
30378 BalaDataType* _tmp101_;
30379 _tmp80_ = bala_ccode_identifier_new ("sizeof");
30380 _tmp81_ = _tmp80_;
30381 _tmp82_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp81_);
30382 _tmp83_ = _tmp82_;
30383 _bala_ccode_node_unref0 (_tmp81_)((_tmp81_ == ((void*)0)) ? ((void*)0) : (_tmp81_ = (bala_ccode_node_unref
(_tmp81_), ((void*)0))))
;
30384 sizeof_to = _tmp83_;
30385 _tmp84_ = sizeof_to;
30386 _tmp85_ = array_type;
30387 _tmp86_ = bala_array_type_get_element_type (_tmp85_);
30388 _tmp87_ = _tmp86_;
30389 _tmp88_ = bala_get_ccode_name ((BalaCodeNode*) _tmp87_);
30390 _tmp89_ = _tmp88_;
30391 _tmp90_ = bala_ccode_constant_new (_tmp89_);
30392 _tmp91_ = _tmp90_;
30393 bala_ccode_function_call_add_argument (_tmp84_, (BalaCCodeExpression*) _tmp91_);
30394 _bala_ccode_node_unref0 (_tmp91_)((_tmp91_ == ((void*)0)) ? ((void*)0) : (_tmp91_ = (bala_ccode_node_unref
(_tmp91_), ((void*)0))))
;
30395 _g_free0 (_tmp89_)(_tmp89_ = (g_free (_tmp89_), ((void*)0)));
30396 _tmp92_ = bala_ccode_identifier_new ("sizeof");
30397 _tmp93_ = _tmp92_;
30398 _tmp94_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp93_);
30399 _tmp95_ = _tmp94_;
30400 _bala_ccode_node_unref0 (_tmp93_)((_tmp93_ == ((void*)0)) ? ((void*)0) : (_tmp93_ = (bala_ccode_node_unref
(_tmp93_), ((void*)0))))
;
30401 sizeof_from = _tmp95_;
30402 _tmp96_ = bala_cast_expression_get_inner (expr);
30403 _tmp97_ = _tmp96_;
30404 _tmp98_ = bala_expression_get_value_type (_tmp97_);
30405 _tmp99_ = _tmp98_;
30406 _tmp100_ = _bala_code_node_ref0 (_tmp99_);
30407 value_type = _tmp100_;
30408 _tmp101_ = value_type;
30409 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp101_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp101_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30410 BalaCCodeFunctionCall* _tmp102_;
30411 BalaDataType* _tmp103_;
30412 BalaTypeSymbol* _tmp104_;
30413 BalaTypeSymbol* _tmp105_;
30414 gchar* _tmp106_;
30415 gchar* _tmp107_;
30416 BalaCCodeConstant* _tmp108_;
30417 BalaCCodeConstant* _tmp109_;
30418 BalaCCodeFunctionCall* _tmp110_;
30419 BalaCCodeFunctionCall* _tmp111_;
30420 BalaCCodeBinaryExpression* _tmp112_;
30421 _tmp102_ = sizeof_from;
30422 _tmp103_ = value_type;
30423 _tmp104_ = bala_data_type_get_type_symbol (_tmp103_);
30424 _tmp105_ = _tmp104_;
30425 _tmp106_ = bala_get_ccode_name ((BalaCodeNode*) _tmp105_);
30426 _tmp107_ = _tmp106_;
30427 _tmp108_ = bala_ccode_constant_new (_tmp107_);
30428 _tmp109_ = _tmp108_;
30429 bala_ccode_function_call_add_argument (_tmp102_, (BalaCCodeExpression*) _tmp109_);
30430 _bala_ccode_node_unref0 (_tmp109_)((_tmp109_ == ((void*)0)) ? ((void*)0) : (_tmp109_ = (bala_ccode_node_unref
(_tmp109_), ((void*)0))))
;
30431 _g_free0 (_tmp107_)(_tmp107_ = (g_free (_tmp107_), ((void*)0)));
30432 _tmp110_ = sizeof_from;
30433 _tmp111_ = sizeof_to;
30434 _tmp112_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_DIV, (BalaCCodeExpression*) _tmp110_, (BalaCCodeExpression*) _tmp111_);
30435 _bala_ccode_node_unref0 (array_length_expr)((array_length_expr == ((void*)0)) ? ((void*)0) : (array_length_expr
= (bala_ccode_node_unref (array_length_expr), ((void*)0))))
;
30436 array_length_expr = (BalaCCodeExpression*) _tmp112_;
30437 } else {
30438 gboolean _tmp113_ = FALSE(0);
30439 BalaDataType* _tmp114_;
30440 _tmp114_ = value_type;
30441 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp114_); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30442 BalaDataType* _tmp115_;
30443 BalaDataType* _tmp116_;
30444 BalaDataType* _tmp117_;
30445 _tmp115_ = value_type;
30446 _tmp116_ = bala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp115_, BALA_TYPE_POINTER_TYPE, BalaPointerType)(((BalaPointerType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp115_), ((bala_pointer_type_get_type ())))))
);
30447 _tmp117_ = _tmp116_;
30448 _tmp113_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp117_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp117_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
30449 } else {
30450 _tmp113_ = FALSE(0);
30451 }
30452 if (_tmp113_) {
30453 BalaCCodeFunctionCall* _tmp118_;
30454 BalaDataType* _tmp119_;
30455 BalaDataType* _tmp120_;
30456 BalaDataType* _tmp121_;
30457 BalaTypeSymbol* _tmp122_;
30458 BalaTypeSymbol* _tmp123_;
30459 gchar* _tmp124_;
30460 gchar* _tmp125_;
30461 BalaCCodeConstant* _tmp126_;
30462 BalaCCodeConstant* _tmp127_;
30463 BalaCCodeFunctionCall* _tmp128_;
30464 BalaCCodeFunctionCall* _tmp129_;
30465 BalaCCodeBinaryExpression* _tmp130_;
30466 _tmp118_ = sizeof_from;
30467 _tmp119_ = value_type;
30468 _tmp120_ = bala_pointer_type_get_base_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp119_, BALA_TYPE_POINTER_TYPE, BalaPointerType)(((BalaPointerType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp119_), ((bala_pointer_type_get_type ())))))
);
30469 _tmp121_ = _tmp120_;
30470 _tmp122_ = bala_data_type_get_type_symbol (_tmp121_);
30471 _tmp123_ = _tmp122_;
30472 _tmp124_ = bala_get_ccode_name ((BalaCodeNode*) _tmp123_);
30473 _tmp125_ = _tmp124_;
30474 _tmp126_ = bala_ccode_constant_new (_tmp125_);
30475 _tmp127_ = _tmp126_;
30476 bala_ccode_function_call_add_argument (_tmp118_, (BalaCCodeExpression*) _tmp127_);
30477 _bala_ccode_node_unref0 (_tmp127_)((_tmp127_ == ((void*)0)) ? ((void*)0) : (_tmp127_ = (bala_ccode_node_unref
(_tmp127_), ((void*)0))))
;
30478 _g_free0 (_tmp125_)(_tmp125_ = (g_free (_tmp125_), ((void*)0)));
30479 _tmp128_ = sizeof_from;
30480 _tmp129_ = sizeof_to;
30481 _tmp130_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_DIV, (BalaCCodeExpression*) _tmp128_, (BalaCCodeExpression*) _tmp129_);
30482 _bala_ccode_node_unref0 (array_length_expr)((array_length_expr == ((void*)0)) ? ((void*)0) : (array_length_expr
= (bala_ccode_node_unref (array_length_expr), ((void*)0))))
;
30483 array_length_expr = (BalaCCodeExpression*) _tmp130_;
30484 } else {
30485 BalaCCodeConstant* _tmp131_;
30486 _tmp131_ = bala_ccode_constant_new ("-1");
30487 _bala_ccode_node_unref0 (array_length_expr)((array_length_expr == ((void*)0)) ? ((void*)0) : (array_length_expr
= (bala_ccode_node_unref (array_length_expr), ((void*)0))))
;
30488 array_length_expr = (BalaCCodeExpression*) _tmp131_;
30489 }
30490 }
30491 {
30492 gint dim = 0;
30493 dim = 1;
30494 {
30495 gboolean _tmp132_ = FALSE(0);
30496 _tmp132_ = TRUE(!(0));
30497 while (TRUE(!(0))) {
30498 BalaArrayType* _tmp134_;
30499 gint _tmp135_;
30500 gint _tmp136_;
30501 BalaCCodeExpression* _tmp137_;
30502 if (!_tmp132_) {
30503 gint _tmp133_;
30504 _tmp133_ = dim;
30505 dim = _tmp133_ + 1;
30506 }
30507 _tmp132_ = FALSE(0);
30508 _tmp134_ = array_type;
30509 _tmp135_ = bala_array_type_get_rank (_tmp134_);
30510 _tmp136_ = _tmp135_;
30511 if (!(dim <= _tmp136_)) {
30512 break;
30513 }
30514 _tmp137_ = array_length_expr;
30515 bala_append_array_length ((BalaExpression*) expr, _tmp137_);
30516 }
30517 }
30518 }
30519 _bala_code_node_unref0 (value_type)((value_type == ((void*)0)) ? ((void*)0) : (value_type = (bala_code_node_unref
(value_type), ((void*)0))))
;
30520 _bala_ccode_node_unref0 (sizeof_from)((sizeof_from == ((void*)0)) ? ((void*)0) : (sizeof_from = (bala_ccode_node_unref
(sizeof_from), ((void*)0))))
;
30521 _bala_ccode_node_unref0 (sizeof_to)((sizeof_to == ((void*)0)) ? ((void*)0) : (sizeof_to = (bala_ccode_node_unref
(sizeof_to), ((void*)0))))
;
30522 _bala_ccode_node_unref0 (array_length_expr)((array_length_expr == ((void*)0)) ? ((void*)0) : (array_length_expr
= (bala_ccode_node_unref (array_length_expr), ((void*)0))))
;
30523 }
30524 }
30525 _tmp138_ = bala_cast_expression_get_inner (expr);
30526 _tmp139_ = _tmp138_;
30527 _tmp140_ = bala_get_cvalue (_tmp139_);
30528 _tmp141_ = _bala_ccode_node_ref0 (_tmp140_);
30529 innercexpr = _tmp141_;
30530 _tmp145_ = bala_cast_expression_get_type_reference (expr);
30531 _tmp146_ = _tmp145_;
30532 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp146_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp146_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30533 BalaDataType* _tmp147_;
30534 BalaDataType* _tmp148_;
30535 gboolean _tmp149_;
30536 gboolean _tmp150_;
30537 _tmp147_ = bala_cast_expression_get_type_reference (expr);
30538 _tmp148_ = _tmp147_;
30539 _tmp149_ = bala_data_type_get_nullable (_tmp148_);
30540 _tmp150_ = _tmp149_;
30541 _tmp144_ = !_tmp150_;
30542 } else {
30543 _tmp144_ = FALSE(0);
30544 }
30545 if (_tmp144_) {
30546 BalaExpression* _tmp151_;
30547 BalaExpression* _tmp152_;
30548 BalaDataType* _tmp153_;
30549 BalaDataType* _tmp154_;
30550 _tmp151_ = bala_cast_expression_get_inner (expr);
30551 _tmp152_ = _tmp151_;
30552 _tmp153_ = bala_expression_get_value_type (_tmp152_);
30553 _tmp154_ = _tmp153_;
30554 _tmp143_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp154_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp154_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
30555 } else {
30556 _tmp143_ = FALSE(0);
30557 }
30558 if (_tmp143_) {
30559 BalaExpression* _tmp155_;
30560 BalaExpression* _tmp156_;
30561 BalaDataType* _tmp157_;
30562 BalaDataType* _tmp158_;
30563 gboolean _tmp159_;
30564 gboolean _tmp160_;
30565 _tmp155_ = bala_cast_expression_get_inner (expr);
30566 _tmp156_ = _tmp155_;
30567 _tmp157_ = bala_expression_get_value_type (_tmp156_);
30568 _tmp158_ = _tmp157_;
30569 _tmp159_ = bala_data_type_get_nullable (_tmp158_);
30570 _tmp160_ = _tmp159_;
30571 _tmp142_ = _tmp160_;
30572 } else {
30573 _tmp142_ = FALSE(0);
30574 }
30575 if (_tmp142_) {
30576 BalaExpression* inner_expr = NULL((void*)0);
30577 BalaExpression* _tmp161_;
30578 BalaExpression* _tmp162_;
30579 gboolean _tmp167_ = FALSE(0);
30580 BalaExpression* _tmp168_;
30581 BalaDataType* _tmp169_;
30582 BalaDataType* _tmp170_;
30583 gboolean _tmp171_;
30584 gboolean _tmp172_;
30585 BalaCCodeExpression* _tmp188_;
30586 BalaCCodeUnaryExpression* _tmp189_;
30587 _tmp161_ = bala_cast_expression_get_inner (expr);
30588 _tmp162_ = _tmp161_;
30589 inner_expr = _tmp162_;
30590 while (TRUE(!(0))) {
30591 BalaExpression* _tmp163_;
30592 BalaExpression* _tmp164_;
30593 BalaExpression* _tmp165_;
30594 BalaExpression* _tmp166_;
30595 _tmp163_ = inner_expr;
30596 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp163_, BALA_TYPE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp163_); GType __t = ((bala_cast_expression_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30597 break;
30598 }
30599 _tmp164_ = inner_expr;
30600 _tmp165_ = bala_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (_tmp164_, BALA_TYPE_CAST_EXPRESSION, BalaCastExpression)(((BalaCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp164_), ((bala_cast_expression_get_type ())))))
);
30601 _tmp166_ = _tmp165_;
30602 inner_expr = _tmp166_;
30603 }
30604 _tmp168_ = inner_expr;
30605 _tmp169_ = bala_expression_get_value_type (_tmp168_);
30606 _tmp170_ = _tmp169_;
30607 _tmp171_ = bala_data_type_get_value_owned (_tmp170_);
30608 _tmp172_ = _tmp171_;
30609 if (_tmp172_) {
30610 gboolean _tmp173_ = FALSE(0);
30611 BalaExpression* _tmp174_;
30612 BalaSymbol* _tmp175_;
30613 BalaSymbol* _tmp176_;
30614 _tmp174_ = inner_expr;
30615 _tmp175_ = bala_expression_get_symbol_reference (_tmp174_);
30616 _tmp176_ = _tmp175_;
30617 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp176_, BALA_TYPE_VARIABLE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp176_); GType __t = ((bala_variable_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30618 _tmp173_ = TRUE(!(0));
30619 } else {
30620 BalaExpression* _tmp177_;
30621 _tmp177_ = inner_expr;
30622 _tmp173_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp177_, BALA_TYPE_ELEMENT_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp177_); GType __t = ((bala_element_access_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
30623 }
30624 _tmp167_ = !_tmp173_;
30625 } else {
30626 _tmp167_ = FALSE(0);
30627 }
30628 if (_tmp167_) {
30629 BalaGLibValue* value = NULL((void*)0);
30630 BalaVoidType* _tmp178_;
30631 BalaVoidType* _tmp179_;
30632 BalaPointerType* _tmp180_;
30633 BalaPointerType* _tmp181_;
30634 BalaCCodeExpression* _tmp182_;
30635 BalaGLibValue* _tmp183_;
30636 BalaGLibValue* _tmp184_;
30637 BalaArrayList* _tmp185_;
30638 BalaArrayList* _tmp186_;
30639 BalaGLibValue* _tmp187_;
30640 _tmp178_ = bala_void_type_new (NULL((void*)0));
30641 _tmp179_ = _tmp178_;
30642 _tmp180_ = bala_pointer_type_new ((BalaDataType*) _tmp179_, NULL((void*)0));
30643 _tmp181_ = _tmp180_;
30644 _tmp182_ = innercexpr;
30645 _tmp183_ = bala_glib_value_new ((BalaDataType*) _tmp181_, _tmp182_, FALSE(0));
30646 _tmp184_ = _tmp183_;
30647 _bala_code_node_unref0 (_tmp181_)((_tmp181_ == ((void*)0)) ? ((void*)0) : (_tmp181_ = (bala_code_node_unref
(_tmp181_), ((void*)0))))
;
30648 _bala_code_node_unref0 (_tmp179_)((_tmp179_ == ((void*)0)) ? ((void*)0) : (_tmp179_ = (bala_code_node_unref
(_tmp179_), ((void*)0))))
;
30649 value = _tmp184_;
30650 _tmp185_ = bala_ccode_base_module_get_temp_ref_values (self);
30651 _tmp186_ = _tmp185_;
30652 _tmp187_ = value;
30653 bala_list_insert ((BalaList*) _tmp186_, 0, (BalaTargetValue*) _tmp187_);
30654 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
30655 }
30656 _tmp188_ = innercexpr;
30657 _tmp189_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp188_);
30658 _bala_ccode_node_unref0 (innercexpr)((innercexpr == ((void*)0)) ? ((void*)0) : (innercexpr = (bala_ccode_node_unref
(innercexpr), ((void*)0))))
;
30659 innercexpr = (BalaCCodeExpression*) _tmp189_;
30660 } else {
30661 gboolean _tmp190_ = FALSE(0);
30662 gboolean _tmp191_ = FALSE(0);
30663 BalaDataType* _tmp192_;
30664 BalaDataType* _tmp193_;
30665 _tmp192_ = bala_cast_expression_get_type_reference (expr);
30666 _tmp193_ = _tmp192_;
30667 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp193_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp193_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30668 BalaDataType* _tmp194_;
30669 BalaDataType* _tmp195_;
30670 gboolean _tmp196_;
30671 gboolean _tmp197_;
30672 _tmp194_ = bala_cast_expression_get_type_reference (expr);
30673 _tmp195_ = _tmp194_;
30674 _tmp196_ = bala_data_type_get_nullable (_tmp195_);
30675 _tmp197_ = _tmp196_;
30676 _tmp191_ = _tmp197_;
30677 } else {
30678 _tmp191_ = FALSE(0);
30679 }
30680 if (_tmp191_) {
30681 BalaExpression* _tmp198_;
30682 BalaExpression* _tmp199_;
30683 BalaDataType* _tmp200_;
30684 BalaDataType* _tmp201_;
30685 _tmp198_ = bala_cast_expression_get_inner (expr);
30686 _tmp199_ = _tmp198_;
30687 _tmp200_ = bala_expression_get_value_type (_tmp199_);
30688 _tmp201_ = _tmp200_;
30689 _tmp190_ = bala_data_type_is_real_non_null_struct_type (_tmp201_);
30690 } else {
30691 _tmp190_ = FALSE(0);
30692 }
30693 if (_tmp190_) {
30694 BalaCCodeExpression* _tmp202_;
30695 BalaCCodeUnaryExpression* _tmp203_;
30696 _tmp202_ = innercexpr;
30697 _tmp203_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp202_);
30698 _bala_ccode_node_unref0 (innercexpr)((innercexpr == ((void*)0)) ? ((void*)0) : (innercexpr = (bala_ccode_node_unref
(innercexpr), ((void*)0))))
;
30699 innercexpr = (BalaCCodeExpression*) _tmp203_;
30700 } else {
30701 gboolean _tmp204_ = FALSE(0);
30702 gboolean _tmp205_ = FALSE(0);
30703 gboolean _tmp206_ = FALSE(0);
30704 BalaDataType* _tmp207_;
30705 BalaDataType* _tmp208_;
30706 _tmp207_ = bala_cast_expression_get_type_reference (expr);
30707 _tmp208_ = _tmp207_;
30708 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp208_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp208_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30709 BalaExpression* _tmp209_;
30710 BalaExpression* _tmp210_;
30711 _tmp209_ = bala_cast_expression_get_inner (expr);
30712 _tmp210_ = _tmp209_;
30713 _tmp206_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp210_, BALA_TYPE_LITERAL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp210_); GType __t = ((bala_literal_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
30714 } else {
30715 _tmp206_ = FALSE(0);
30716 }
30717 if (_tmp206_) {
30718 BalaExpression* _tmp211_;
30719 BalaExpression* _tmp212_;
30720 BalaDataType* _tmp213_;
30721 BalaDataType* _tmp214_;
30722 _tmp211_ = bala_cast_expression_get_inner (expr);
30723 _tmp212_ = _tmp211_;
30724 _tmp213_ = bala_expression_get_value_type (_tmp212_);
30725 _tmp214_ = _tmp213_;
30726 _tmp205_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp214_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp214_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
30727 } else {
30728 _tmp205_ = FALSE(0);
30729 }
30730 if (_tmp205_) {
30731 BalaExpression* _tmp215_;
30732 BalaExpression* _tmp216_;
30733 BalaDataType* _tmp217_;
30734 BalaDataType* _tmp218_;
30735 gboolean _tmp219_;
30736 gboolean _tmp220_;
30737 _tmp215_ = bala_cast_expression_get_inner (expr);
30738 _tmp216_ = _tmp215_;
30739 _tmp217_ = bala_expression_get_value_type (_tmp216_);
30740 _tmp218_ = _tmp217_;
30741 _tmp219_ = bala_data_type_get_nullable (_tmp218_);
30742 _tmp220_ = _tmp219_;
30743 _tmp204_ = !_tmp220_;
30744 } else {
30745 _tmp204_ = FALSE(0);
30746 }
30747 if (_tmp204_) {
30748 BalaCCodeExpression* _tmp221_;
30749 BalaCCodeUnaryExpression* _tmp222_;
30750 _tmp221_ = innercexpr;
30751 _tmp222_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp221_);
30752 _bala_ccode_node_unref0 (innercexpr)((innercexpr == ((void*)0)) ? ((void*)0) : (innercexpr = (bala_ccode_node_unref
(innercexpr), ((void*)0))))
;
30753 innercexpr = (BalaCCodeExpression*) _tmp222_;
30754 }
30755 }
30756 }
30757 _tmp223_ = innercexpr;
30758 _tmp224_ = bala_cast_expression_get_type_reference (expr);
30759 _tmp225_ = _tmp224_;
30760 _tmp226_ = bala_get_ccode_name ((BalaCodeNode*) _tmp225_);
30761 _tmp227_ = _tmp226_;
30762 _tmp228_ = bala_ccode_cast_expression_new (_tmp223_, _tmp227_);
30763 _tmp229_ = _tmp228_;
30764 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp229_);
30765 _bala_ccode_node_unref0 (_tmp229_)((_tmp229_ == ((void*)0)) ? ((void*)0) : (_tmp229_ = (bala_ccode_node_unref
(_tmp229_), ((void*)0))))
;
30766 _g_free0 (_tmp227_)(_tmp227_ = (g_free (_tmp227_), ((void*)0)));
30767 _tmp230_ = bala_cast_expression_get_type_reference (expr);
30768 _tmp231_ = _tmp230_;
30769 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp231_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp231_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
30770 BalaCCodeExpression* target = NULL((void*)0);
30771 BalaExpression* _tmp232_;
30772 BalaExpression* _tmp233_;
30773 BalaCCodeExpression* _tmp234_;
30774 BalaCCodeExpression* _tmp235_;
30775 BalaCCodeExpression* _tmp236_;
30776 BalaCCodeExpression* target_destroy_notify = NULL((void*)0);
30777 BalaExpression* _tmp240_;
30778 BalaExpression* _tmp241_;
30779 BalaCCodeExpression* _tmp242_;
30780 BalaCCodeExpression* _tmp243_;
30781 BalaCCodeExpression* _tmp244_;
30782 _tmp232_ = bala_cast_expression_get_inner (expr);
30783 _tmp233_ = _tmp232_;
30784 _tmp234_ = bala_get_delegate_target (_tmp233_);
30785 _tmp235_ = _bala_ccode_node_ref0 (_tmp234_);
30786 target = _tmp235_;
30787 _tmp236_ = target;
30788 if (_tmp236_ != NULL((void*)0)) {
30789 BalaCCodeExpression* _tmp237_;
30790 _tmp237_ = target;
30791 bala_set_delegate_target ((BalaExpression*) expr, _tmp237_);
30792 } else {
30793 BalaCCodeConstant* _tmp238_;
30794 BalaCCodeConstant* _tmp239_;
30795 _tmp238_ = bala_ccode_constant_new ("NULL");
30796 _tmp239_ = _tmp238_;
30797 bala_set_delegate_target ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp239_);
30798 _bala_ccode_node_unref0 (_tmp239_)((_tmp239_ == ((void*)0)) ? ((void*)0) : (_tmp239_ = (bala_ccode_node_unref
(_tmp239_), ((void*)0))))
;
30799 }
30800 _tmp240_ = bala_cast_expression_get_inner (expr);
30801 _tmp241_ = _tmp240_;
30802 _tmp242_ = bala_get_delegate_target_destroy_notify (_tmp241_);
30803 _tmp243_ = _bala_ccode_node_ref0 (_tmp242_);
30804 target_destroy_notify = _tmp243_;
30805 _tmp244_ = target_destroy_notify;
30806 if (_tmp244_ != NULL((void*)0)) {
30807 BalaCCodeExpression* _tmp245_;
30808 _tmp245_ = target_destroy_notify;
30809 bala_set_delegate_target_destroy_notify ((BalaExpression*) expr, _tmp245_);
30810 } else {
30811 BalaCCodeConstant* _tmp246_;
30812 BalaCCodeConstant* _tmp247_;
30813 _tmp246_ = bala_ccode_constant_new ("NULL");
30814 _tmp247_ = _tmp246_;
30815 bala_set_delegate_target_destroy_notify ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp247_);
30816 _bala_ccode_node_unref0 (_tmp247_)((_tmp247_ == ((void*)0)) ? ((void*)0) : (_tmp247_ = (bala_ccode_node_unref
(_tmp247_), ((void*)0))))
;
30817 }
30818 _bala_ccode_node_unref0 (target_destroy_notify)((target_destroy_notify == ((void*)0)) ? ((void*)0) : (target_destroy_notify
= (bala_ccode_node_unref (target_destroy_notify), ((void*)0)
)))
;
30819 _bala_ccode_node_unref0 (target)((target == ((void*)0)) ? ((void*)0) : (target = (bala_ccode_node_unref
(target), ((void*)0))))
;
30820 }
30821 _bala_ccode_node_unref0 (innercexpr)((innercexpr == ((void*)0)) ? ((void*)0) : (innercexpr = (bala_ccode_node_unref
(innercexpr), ((void*)0))))
;
30822 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
30823}
30824
30825static void
30826bala_ccode_base_module_real_visit_named_argument (BalaCodeVisitor* base,
30827 BalaNamedArgument* expr)
30828{
30829 BalaCCodeBaseModule * self;
30830 BalaExpression* _tmp0_;
30831 BalaExpression* _tmp1_;
30832 BalaCCodeExpression* _tmp2_;
30833 self = (BalaCCodeBaseModule*) base;
30834 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
30835 _tmp0_ = bala_named_argument_get_inner (expr);
30836 _tmp1_ = _tmp0_;
30837 _tmp2_ = bala_get_cvalue (_tmp1_);
30838 bala_set_cvalue ((BalaExpression*) expr, _tmp2_);
30839}
30840
30841static void
30842bala_ccode_base_module_real_visit_pointer_indirection (BalaCodeVisitor* base,
30843 BalaPointerIndirection* expr)
30844{
30845 BalaCCodeBaseModule * self;
30846 BalaExpression* _tmp0_;
30847 BalaExpression* _tmp1_;
30848 BalaCCodeExpression* _tmp2_;
30849 BalaCCodeUnaryExpression* _tmp3_;
30850 BalaCCodeUnaryExpression* _tmp4_;
30851 BalaTargetValue* _tmp5_;
30852 BalaTargetValue* _tmp6_;
30853 BalaExpression* _tmp7_;
30854 BalaExpression* _tmp8_;
30855 BalaTargetValue* _tmp9_;
30856 BalaTargetValue* _tmp10_;
30857 self = (BalaCCodeBaseModule*) base;
30858 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
30859 _tmp0_ = bala_pointer_indirection_get_inner (expr);
30860 _tmp1_ = _tmp0_;
30861 _tmp2_ = bala_get_cvalue (_tmp1_);
30862 _tmp3_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp2_);
30863 _tmp4_ = _tmp3_;
30864 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp4_);
30865 _bala_ccode_node_unref0 (_tmp4_)((_tmp4_ == ((void*)0)) ? ((void*)0) : (_tmp4_ = (bala_ccode_node_unref
(_tmp4_), ((void*)0))))
;
30866 _tmp5_ = bala_expression_get_target_value ((BalaExpression*) expr);
30867 _tmp6_ = _tmp5_;
30868 _tmp7_ = bala_pointer_indirection_get_inner (expr);
30869 _tmp8_ = _tmp7_;
30870 _tmp9_ = bala_expression_get_target_value (_tmp8_);
30871 _tmp10_ = _tmp9_;
30872 G_TYPE_CHECK_INSTANCE_CAST (_tmp6_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp6_), ((bala_glib_value_get_type ())))))
->lvalue = bala_get_lvalue (_tmp10_);
30873}
30874
30875static void
30876bala_ccode_base_module_real_visit_addressof_expression (BalaCodeVisitor* base,
30877 BalaAddressofExpression* expr)
30878{
30879 BalaCCodeBaseModule * self;
30880 BalaExpression* _tmp0_;
30881 BalaExpression* _tmp1_;
30882 BalaCCodeExpression* _tmp2_;
30883 BalaCCodeUnaryExpression* _tmp3_;
30884 BalaCCodeUnaryExpression* _tmp4_;
30885 self = (BalaCCodeBaseModule*) base;
30886 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
30887 _tmp0_ = bala_addressof_expression_get_inner (expr);
30888 _tmp1_ = _tmp0_;
30889 _tmp2_ = bala_get_cvalue (_tmp1_);
30890 _tmp3_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp2_);
30891 _tmp4_ = _tmp3_;
30892 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp4_);
30893 _bala_ccode_node_unref0 (_tmp4_)((_tmp4_ == ((void*)0)) ? ((void*)0) : (_tmp4_ = (bala_ccode_node_unref
(_tmp4_), ((void*)0))))
;
30894}
30895
30896static void
30897bala_ccode_base_module_real_visit_reference_transfer_expression (BalaCodeVisitor* base,
30898 BalaReferenceTransferExpression* expr)
30899{
30900 BalaCCodeBaseModule * self;
30901 BalaExpression* _tmp0_;
30902 BalaExpression* _tmp1_;
30903 BalaTargetValue* _tmp2_;
30904 BalaTargetValue* _tmp3_;
30905 BalaTargetValue* _tmp4_;
30906 BalaTargetValue* _tmp5_;
30907 gboolean _tmp6_ = FALSE(0);
30908 BalaExpression* _tmp7_;
30909 BalaExpression* _tmp8_;
30910 BalaDataType* _tmp9_;
30911 BalaDataType* _tmp10_;
30912 self = (BalaCCodeBaseModule*) base;
30913 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
30914 _tmp0_ = bala_reference_transfer_expression_get_inner (expr);
30915 _tmp1_ = _tmp0_;
30916 _tmp2_ = bala_expression_get_target_value (_tmp1_);
30917 _tmp3_ = _tmp2_;
30918 _tmp4_ = bala_ccode_base_module_store_temp_value (self, _tmp3_, (BalaCodeNode*) expr, NULL((void*)0));
30919 _tmp5_ = _tmp4_;
30920 bala_expression_set_target_value ((BalaExpression*) expr, _tmp5_);
30921 _bala_target_value_unref0 (_tmp5_)((_tmp5_ == ((void*)0)) ? ((void*)0) : (_tmp5_ = (bala_target_value_unref
(_tmp5_), ((void*)0))))
;
30922 _tmp7_ = bala_reference_transfer_expression_get_inner (expr);
30923 _tmp8_ = _tmp7_;
30924 _tmp9_ = bala_expression_get_value_type (_tmp8_);
30925 _tmp10_ = _tmp9_;
30926 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp10_); GType __t = ((bala_struct_value_type_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
30927 BalaExpression* _tmp11_;
30928 BalaExpression* _tmp12_;
30929 BalaDataType* _tmp13_;
30930 BalaDataType* _tmp14_;
30931 gboolean _tmp15_;
30932 gboolean _tmp16_;
30933 _tmp11_ = bala_reference_transfer_expression_get_inner (expr);
30934 _tmp12_ = _tmp11_;
30935 _tmp13_ = bala_expression_get_value_type (_tmp12_);
30936 _tmp14_ = _tmp13_;
30937 _tmp15_ = bala_data_type_get_nullable (_tmp14_);
30938 _tmp16_ = _tmp15_;
30939 _tmp6_ = !_tmp16_;
30940 } else {
30941 _tmp6_ = FALSE(0);
30942 }
30943 if (_tmp6_) {
30944 BalaCCodeFile* _tmp17_;
30945 BalaCCodeFunctionCall* creation_call = NULL((void*)0);
30946 BalaCCodeIdentifier* _tmp18_;
30947 BalaCCodeIdentifier* _tmp19_;
30948 BalaCCodeFunctionCall* _tmp20_;
30949 BalaCCodeFunctionCall* _tmp21_;
30950 BalaCCodeFunctionCall* _tmp22_;
30951 BalaExpression* _tmp23_;
30952 BalaExpression* _tmp24_;
30953 BalaCCodeExpression* _tmp25_;
30954 BalaCCodeUnaryExpression* _tmp26_;
30955 BalaCCodeUnaryExpression* _tmp27_;
30956 BalaCCodeFunctionCall* _tmp28_;
30957 BalaCCodeConstant* _tmp29_;
30958 BalaCCodeConstant* _tmp30_;
30959 BalaCCodeFunctionCall* _tmp31_;
30960 BalaExpression* _tmp32_;
30961 BalaExpression* _tmp33_;
30962 BalaDataType* _tmp34_;
30963 BalaDataType* _tmp35_;
30964 gchar* _tmp36_;
30965 gchar* _tmp37_;
30966 gchar* _tmp38_;
30967 gchar* _tmp39_;
30968 BalaCCodeIdentifier* _tmp40_;
30969 BalaCCodeIdentifier* _tmp41_;
30970 BalaCCodeFunction* _tmp42_;
30971 BalaCCodeFunction* _tmp43_;
30972 BalaCCodeFunctionCall* _tmp44_;
30973 _tmp17_ = self->cfile;
30974 bala_ccode_file_add_include (_tmp17_, "string.h", FALSE(0));
30975 _tmp18_ = bala_ccode_identifier_new ("memset");
30976 _tmp19_ = _tmp18_;
30977 _tmp20_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp19_);
30978 _tmp21_ = _tmp20_;
30979 _bala_ccode_node_unref0 (_tmp19_)((_tmp19_ == ((void*)0)) ? ((void*)0) : (_tmp19_ = (bala_ccode_node_unref
(_tmp19_), ((void*)0))))
;
30980 creation_call = _tmp21_;
30981 _tmp22_ = creation_call;
30982 _tmp23_ = bala_reference_transfer_expression_get_inner (expr);
30983 _tmp24_ = _tmp23_;
30984 _tmp25_ = bala_get_cvalue (_tmp24_);
30985 _tmp26_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp25_);
30986 _tmp27_ = _tmp26_;
30987 bala_ccode_function_call_add_argument (_tmp22_, (BalaCCodeExpression*) _tmp27_);
30988 _bala_ccode_node_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_ccode_node_unref
(_tmp27_), ((void*)0))))
;
30989 _tmp28_ = creation_call;
30990 _tmp29_ = bala_ccode_constant_new ("0");
30991 _tmp30_ = _tmp29_;
30992 bala_ccode_function_call_add_argument (_tmp28_, (BalaCCodeExpression*) _tmp30_);
30993 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
30994 _tmp31_ = creation_call;
30995 _tmp32_ = bala_reference_transfer_expression_get_inner (expr);
30996 _tmp33_ = _tmp32_;
30997 _tmp34_ = bala_expression_get_value_type (_tmp33_);
30998 _tmp35_ = _tmp34_;
30999 _tmp36_ = bala_get_ccode_name ((BalaCodeNode*) _tmp35_);
31000 _tmp37_ = _tmp36_;
31001 _tmp38_ = g_strdup_printf ("sizeof (%s)", _tmp37_);
31002 _tmp39_ = _tmp38_;
31003 _tmp40_ = bala_ccode_identifier_new (_tmp39_);
31004 _tmp41_ = _tmp40_;
31005 bala_ccode_function_call_add_argument (_tmp31_, (BalaCCodeExpression*) _tmp41_);
31006 _bala_ccode_node_unref0 (_tmp41_)((_tmp41_ == ((void*)0)) ? ((void*)0) : (_tmp41_ = (bala_ccode_node_unref
(_tmp41_), ((void*)0))))
;
31007 _g_free0 (_tmp39_)(_tmp39_ = (g_free (_tmp39_), ((void*)0)));
31008 _g_free0 (_tmp37_)(_tmp37_ = (g_free (_tmp37_), ((void*)0)));
31009 _tmp42_ = bala_ccode_base_module_get_ccode (self);
31010 _tmp43_ = _tmp42_;
31011 _tmp44_ = creation_call;
31012 bala_ccode_function_add_expression (_tmp43_, (BalaCCodeExpression*) _tmp44_);
31013 _bala_ccode_node_unref0 (creation_call)((creation_call == ((void*)0)) ? ((void*)0) : (creation_call =
(bala_ccode_node_unref (creation_call), ((void*)0))))
;
31014 } else {
31015 BalaDataType* _tmp45_;
31016 BalaDataType* _tmp46_;
31017 _tmp45_ = bala_expression_get_value_type ((BalaExpression*) expr);
31018 _tmp46_ = _tmp45_;
31019 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp46_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp46_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
31020 BalaCCodeFunction* _tmp47_;
31021 BalaCCodeFunction* _tmp48_;
31022 BalaExpression* _tmp49_;
31023 BalaExpression* _tmp50_;
31024 BalaCCodeExpression* _tmp51_;
31025 BalaCCodeConstant* _tmp52_;
31026 BalaCCodeConstant* _tmp53_;
31027 BalaCCodeExpression* target = NULL((void*)0);
31028 BalaExpression* _tmp54_;
31029 BalaExpression* _tmp55_;
31030 BalaTargetValue* _tmp56_;
31031 BalaTargetValue* _tmp57_;
31032 BalaCCodeExpression* _tmp58_;
31033 BalaCCodeExpression* _tmp59_;
31034 BalaCCodeExpression* target_destroy_notify = NULL((void*)0);
31035 BalaExpression* _tmp65_;
31036 BalaExpression* _tmp66_;
31037 BalaTargetValue* _tmp67_;
31038 BalaTargetValue* _tmp68_;
31039 BalaCCodeExpression* _tmp69_;
31040 BalaCCodeExpression* _tmp70_;
31041 _tmp47_ = bala_ccode_base_module_get_ccode (self);
31042 _tmp48_ = _tmp47_;
31043 _tmp49_ = bala_reference_transfer_expression_get_inner (expr);
31044 _tmp50_ = _tmp49_;
31045 _tmp51_ = bala_get_cvalue (_tmp50_);
31046 _tmp52_ = bala_ccode_constant_new ("NULL");
31047 _tmp53_ = _tmp52_;
31048 bala_ccode_function_add_assignment (_tmp48_, _tmp51_, (BalaCCodeExpression*) _tmp53_);
31049 _bala_ccode_node_unref0 (_tmp53_)((_tmp53_ == ((void*)0)) ? ((void*)0) : (_tmp53_ = (bala_ccode_node_unref
(_tmp53_), ((void*)0))))
;
31050 _tmp54_ = bala_reference_transfer_expression_get_inner (expr);
31051 _tmp55_ = _tmp54_;
31052 _tmp56_ = bala_expression_get_target_value (_tmp55_);
31053 _tmp57_ = _tmp56_;
31054 _tmp58_ = bala_ccode_base_module_get_delegate_target_cvalue (self, _tmp57_);
31055 target = _tmp58_;
31056 _tmp59_ = target;
31057 if (_tmp59_ != NULL((void*)0)) {
31058 BalaCCodeFunction* _tmp60_;
31059 BalaCCodeFunction* _tmp61_;
31060 BalaCCodeExpression* _tmp62_;
31061 BalaCCodeConstant* _tmp63_;
31062 BalaCCodeConstant* _tmp64_;
31063 _tmp60_ = bala_ccode_base_module_get_ccode (self);
31064 _tmp61_ = _tmp60_;
31065 _tmp62_ = target;
31066 _tmp63_ = bala_ccode_constant_new ("NULL");
31067 _tmp64_ = _tmp63_;
31068 bala_ccode_function_add_assignment (_tmp61_, _tmp62_, (BalaCCodeExpression*) _tmp64_);
31069 _bala_ccode_node_unref0 (_tmp64_)((_tmp64_ == ((void*)0)) ? ((void*)0) : (_tmp64_ = (bala_ccode_node_unref
(_tmp64_), ((void*)0))))
;
31070 }
31071 _tmp65_ = bala_reference_transfer_expression_get_inner (expr);
31072 _tmp66_ = _tmp65_;
31073 _tmp67_ = bala_expression_get_target_value (_tmp66_);
31074 _tmp68_ = _tmp67_;
31075 _tmp69_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, _tmp68_);
31076 target_destroy_notify = _tmp69_;
31077 _tmp70_ = target_destroy_notify;
31078 if (_tmp70_ != NULL((void*)0)) {
31079 BalaCCodeFunction* _tmp71_;
31080 BalaCCodeFunction* _tmp72_;
31081 BalaCCodeExpression* _tmp73_;
31082 BalaCCodeConstant* _tmp74_;
31083 BalaCCodeConstant* _tmp75_;
31084 _tmp71_ = bala_ccode_base_module_get_ccode (self);
31085 _tmp72_ = _tmp71_;
31086 _tmp73_ = target_destroy_notify;
31087 _tmp74_ = bala_ccode_constant_new ("NULL");
31088 _tmp75_ = _tmp74_;
31089 bala_ccode_function_add_assignment (_tmp72_, _tmp73_, (BalaCCodeExpression*) _tmp75_);
31090 _bala_ccode_node_unref0 (_tmp75_)((_tmp75_ == ((void*)0)) ? ((void*)0) : (_tmp75_ = (bala_ccode_node_unref
(_tmp75_), ((void*)0))))
;
31091 }
31092 _bala_ccode_node_unref0 (target_destroy_notify)((target_destroy_notify == ((void*)0)) ? ((void*)0) : (target_destroy_notify
= (bala_ccode_node_unref (target_destroy_notify), ((void*)0)
)))
;
31093 _bala_ccode_node_unref0 (target)((target == ((void*)0)) ? ((void*)0) : (target = (bala_ccode_node_unref
(target), ((void*)0))))
;
31094 } else {
31095 BalaExpression* _tmp76_;
31096 BalaExpression* _tmp77_;
31097 BalaDataType* _tmp78_;
31098 BalaDataType* _tmp79_;
31099 _tmp76_ = bala_reference_transfer_expression_get_inner (expr);
31100 _tmp77_ = _tmp76_;
31101 _tmp78_ = bala_expression_get_value_type (_tmp77_);
31102 _tmp79_ = _tmp78_;
31103 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp79_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp79_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
31104 BalaArrayType* array_type = NULL((void*)0);
31105 BalaExpression* _tmp80_;
31106 BalaExpression* _tmp81_;
31107 BalaDataType* _tmp82_;
31108 BalaDataType* _tmp83_;
31109 BalaArrayType* _tmp84_;
31110 BalaGLibValue* glib_value = NULL((void*)0);
31111 BalaExpression* _tmp85_;
31112 BalaExpression* _tmp86_;
31113 BalaTargetValue* _tmp87_;
31114 BalaTargetValue* _tmp88_;
31115 BalaGLibValue* _tmp89_;
31116 BalaCCodeFunction* _tmp90_;
31117 BalaCCodeFunction* _tmp91_;
31118 BalaExpression* _tmp92_;
31119 BalaExpression* _tmp93_;
31120 BalaCCodeExpression* _tmp94_;
31121 BalaCCodeConstant* _tmp95_;
31122 BalaCCodeConstant* _tmp96_;
31123 BalaGLibValue* _tmp97_;
31124 BalaList* _tmp98_;
31125 _tmp80_ = bala_reference_transfer_expression_get_inner (expr);
31126 _tmp81_ = _tmp80_;
31127 _tmp82_ = bala_expression_get_value_type (_tmp81_);
31128 _tmp83_ = _tmp82_;
31129 _tmp84_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp83_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp83_), ((bala_array_type_get_type ())))))
);
31130 array_type = _tmp84_;
31131 _tmp85_ = bala_reference_transfer_expression_get_inner (expr);
31132 _tmp86_ = _tmp85_;
31133 _tmp87_ = bala_expression_get_target_value (_tmp86_);
31134 _tmp88_ = _tmp87_;
31135 _tmp89_ = _bala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp88_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp88_), ((bala_glib_value_get_type ())))))
);
31136 glib_value = _tmp89_;
31137 _tmp90_ = bala_ccode_base_module_get_ccode (self);
31138 _tmp91_ = _tmp90_;
31139 _tmp92_ = bala_reference_transfer_expression_get_inner (expr);
31140 _tmp93_ = _tmp92_;
31141 _tmp94_ = bala_get_cvalue (_tmp93_);
31142 _tmp95_ = bala_ccode_constant_new ("NULL");
31143 _tmp96_ = _tmp95_;
31144 bala_ccode_function_add_assignment (_tmp91_, _tmp94_, (BalaCCodeExpression*) _tmp96_);
31145 _bala_ccode_node_unref0 (_tmp96_)((_tmp96_ == ((void*)0)) ? ((void*)0) : (_tmp96_ = (bala_ccode_node_unref
(_tmp96_), ((void*)0))))
;
31146 _tmp97_ = glib_value;
31147 _tmp98_ = _tmp97_->array_length_cvalues;
31148 if (_tmp98_ != NULL((void*)0)) {
31149 {
31150 gint dim = 0;
31151 dim = 1;
31152 {
31153 gboolean _tmp99_ = FALSE(0);
31154 _tmp99_ = TRUE(!(0));
31155 while (TRUE(!(0))) {
31156 BalaArrayType* _tmp101_;
31157 gint _tmp102_;
31158 gint _tmp103_;
31159 BalaCCodeFunction* _tmp104_;
31160 BalaCCodeFunction* _tmp105_;
31161 BalaGLibValue* _tmp106_;
31162 BalaCCodeExpression* _tmp107_;
31163 BalaCCodeExpression* _tmp108_;
31164 BalaCCodeConstant* _tmp109_;
31165 BalaCCodeConstant* _tmp110_;
31166 if (!_tmp99_) {
31167 gint _tmp100_;
31168 _tmp100_ = dim;
31169 dim = _tmp100_ + 1;
31170 }
31171 _tmp99_ = FALSE(0);
31172 _tmp101_ = array_type;
31173 _tmp102_ = bala_array_type_get_rank (_tmp101_);
31174 _tmp103_ = _tmp102_;
31175 if (!(dim <= _tmp103_)) {
31176 break;
31177 }
31178 _tmp104_ = bala_ccode_base_module_get_ccode (self);
31179 _tmp105_ = _tmp104_;
31180 _tmp106_ = glib_value;
31181 _tmp107_ = bala_ccode_base_module_get_array_length_cvalue (self, (BalaTargetValue*) _tmp106_, dim);
31182 _tmp108_ = _tmp107_;
31183 _tmp109_ = bala_ccode_constant_new ("0");
31184 _tmp110_ = _tmp109_;
31185 bala_ccode_function_add_assignment (_tmp105_, _tmp108_, (BalaCCodeExpression*) _tmp110_);
31186 _bala_ccode_node_unref0 (_tmp110_)((_tmp110_ == ((void*)0)) ? ((void*)0) : (_tmp110_ = (bala_ccode_node_unref
(_tmp110_), ((void*)0))))
;
31187 _bala_ccode_node_unref0 (_tmp108_)((_tmp108_ == ((void*)0)) ? ((void*)0) : (_tmp108_ = (bala_ccode_node_unref
(_tmp108_), ((void*)0))))
;
31188 }
31189 }
31190 }
31191 }
31192 _bala_target_value_unref0 (glib_value)((glib_value == ((void*)0)) ? ((void*)0) : (glib_value = (bala_target_value_unref
(glib_value), ((void*)0))))
;
31193 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
31194 } else {
31195 BalaCCodeFunction* _tmp111_;
31196 BalaCCodeFunction* _tmp112_;
31197 BalaExpression* _tmp113_;
31198 BalaExpression* _tmp114_;
31199 BalaCCodeExpression* _tmp115_;
31200 BalaCCodeConstant* _tmp116_;
31201 BalaCCodeConstant* _tmp117_;
31202 _tmp111_ = bala_ccode_base_module_get_ccode (self);
31203 _tmp112_ = _tmp111_;
31204 _tmp113_ = bala_reference_transfer_expression_get_inner (expr);
31205 _tmp114_ = _tmp113_;
31206 _tmp115_ = bala_get_cvalue (_tmp114_);
31207 _tmp116_ = bala_ccode_constant_new ("NULL");
31208 _tmp117_ = _tmp116_;
31209 bala_ccode_function_add_assignment (_tmp112_, _tmp115_, (BalaCCodeExpression*) _tmp117_);
31210 _bala_ccode_node_unref0 (_tmp117_)((_tmp117_ == ((void*)0)) ? ((void*)0) : (_tmp117_ = (bala_ccode_node_unref
(_tmp117_), ((void*)0))))
;
31211 }
31212 }
31213 }
31214}
31215
31216static void
31217bala_ccode_base_module_real_visit_binary_expression (BalaCodeVisitor* base,
31218 BalaBinaryExpression* expr)
31219{
31220 BalaCCodeBaseModule * self;
31221 BalaCCodeExpression* cleft = NULL((void*)0);
31222 BalaExpression* _tmp0_;
31223 BalaExpression* _tmp1_;
31224 BalaCCodeExpression* _tmp2_;
31225 BalaCCodeExpression* _tmp3_;
31226 BalaCCodeExpression* cright = NULL((void*)0);
31227 BalaExpression* _tmp4_;
31228 BalaExpression* _tmp5_;
31229 BalaCCodeExpression* _tmp6_;
31230 BalaCCodeExpression* _tmp7_;
31231 BalaCCodeExpression* left_chain = NULL((void*)0);
31232 gboolean _tmp8_;
31233 gboolean _tmp9_;
31234 BalaCCodeBinaryOperator op = 0;
31235 BalaBinaryOperator _tmp51_;
31236 BalaBinaryOperator _tmp52_;
31237 gboolean _tmp154_ = FALSE(0);
31238 BalaBinaryOperator _tmp155_;
31239 BalaBinaryOperator _tmp156_;
31240 gboolean _tmp227_ = FALSE(0);
31241 gboolean _tmp228_ = FALSE(0);
31242 gboolean _tmp229_ = FALSE(0);
31243 BalaExpression* _tmp230_;
31244 BalaExpression* _tmp231_;
31245 BalaDataType* _tmp232_;
31246 BalaDataType* _tmp233_;
31247 gboolean is_string_comparison = FALSE(0);
31248 gboolean _tmp248_ = FALSE(0);
31249 BalaExpression* _tmp249_;
31250 BalaExpression* _tmp250_;
31251 gboolean has_string_literal = FALSE(0);
31252 gboolean _tmp253_ = FALSE(0);
31253 BalaCCodeBinaryOperator _tmp380_;
31254 BalaCCodeExpression* _tmp381_;
31255 BalaCCodeExpression* _tmp382_;
31256 BalaCCodeBinaryExpression* _tmp383_;
31257 BalaCCodeBinaryExpression* _tmp384_;
31258 BalaCCodeExpression* _tmp385_;
31259 self = (BalaCCodeBaseModule*) base;
31260 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
31261 _tmp0_ = bala_binary_expression_get_left (expr);
31262 _tmp1_ = _tmp0_;
31263 _tmp2_ = bala_get_cvalue (_tmp1_);
31264 _tmp3_ = _bala_ccode_node_ref0 (_tmp2_);
31265 cleft = _tmp3_;
31266 _tmp4_ = bala_binary_expression_get_right (expr);
31267 _tmp5_ = _tmp4_;
31268 _tmp6_ = bala_get_cvalue (_tmp5_);
31269 _tmp7_ = _bala_ccode_node_ref0 (_tmp6_);
31270 cright = _tmp7_;
31271 left_chain = NULL((void*)0);
31272 _tmp8_ = bala_binary_expression_get_is_chained (expr);
31273 _tmp9_ = _tmp8_;
31274 if (_tmp9_) {
31275 BalaBinaryExpression* lbe = NULL((void*)0);
31276 BalaExpression* _tmp10_;
31277 BalaExpression* _tmp11_;
31278 BalaBinaryExpression* _tmp12_;
31279 BalaLocalVariable* temp_decl = NULL((void*)0);
31280 BalaBinaryExpression* _tmp13_;
31281 BalaExpression* _tmp14_;
31282 BalaExpression* _tmp15_;
31283 BalaDataType* _tmp16_;
31284 BalaDataType* _tmp17_;
31285 BalaLocalVariable* _tmp18_;
31286 BalaLocalVariable* _tmp19_;
31287 BalaCCodeExpression* cvar = NULL((void*)0);
31288 BalaLocalVariable* _tmp20_;
31289 const gchar* _tmp21_;
31290 const gchar* _tmp22_;
31291 BalaCCodeExpression* _tmp23_;
31292 BalaCCodeBinaryExpression* clbe = NULL((void*)0);
31293 BalaBinaryExpression* _tmp24_;
31294 BalaCCodeExpression* _tmp25_;
31295 BalaCCodeBinaryExpression* _tmp26_;
31296 BalaBinaryExpression* _tmp27_;
31297 gboolean _tmp28_;
31298 gboolean _tmp29_;
31299 BalaCCodeFunction* _tmp34_;
31300 BalaCCodeFunction* _tmp35_;
31301 BalaCCodeExpression* _tmp36_;
31302 BalaBinaryExpression* _tmp37_;
31303 BalaExpression* _tmp38_;
31304 BalaExpression* _tmp39_;
31305 BalaCCodeExpression* _tmp40_;
31306 BalaCCodeBinaryExpression* _tmp41_;
31307 BalaLocalVariable* _tmp42_;
31308 const gchar* _tmp43_;
31309 const gchar* _tmp44_;
31310 BalaCCodeExpression* _tmp45_;
31311 BalaCCodeExpression* _tmp46_;
31312 BalaCCodeExpression* _tmp47_;
31313 BalaCCodeExpression* _tmp48_;
31314 BalaCCodeExpression* _tmp49_;
31315 BalaCCodeExpression* _tmp50_;
31316 _tmp10_ = bala_binary_expression_get_left (expr);
31317 _tmp11_ = _tmp10_;
31318 _tmp12_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp11_, BALA_TYPE_BINARY_EXPRESSION, BalaBinaryExpression)(((BalaBinaryExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp11_), ((bala_binary_expression_get_type ())))))
);
31319 lbe = _tmp12_;
31320 _tmp13_ = lbe;
31321 _tmp14_ = bala_binary_expression_get_right (_tmp13_);
31322 _tmp15_ = _tmp14_;
31323 _tmp16_ = bala_expression_get_target_type (_tmp15_);
31324 _tmp17_ = _tmp16_;
31325 _tmp18_ = bala_ccode_base_module_get_temp_variable (self, _tmp17_, TRUE(!(0)), NULL((void*)0), FALSE(0));
31326 temp_decl = _tmp18_;
31327 _tmp19_ = temp_decl;
31328 bala_ccode_base_module_emit_temp_var (self, _tmp19_, FALSE(0));
31329 _tmp20_ = temp_decl;
31330 _tmp21_ = bala_symbol_get_name ((BalaSymbol*) _tmp20_);
31331 _tmp22_ = _tmp21_;
31332 _tmp23_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp22_);
31333 cvar = _tmp23_;
31334 _tmp24_ = lbe;
31335 _tmp25_ = bala_get_cvalue ((BalaExpression*) _tmp24_);
31336 _tmp26_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp25_, BALA_TYPE_CCODE_BINARY_EXPRESSION, BalaCCodeBinaryExpression)(((BalaCCodeBinaryExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp25_), ((bala_ccode_binary_expression_get_type ())))))
);
31337 clbe = _tmp26_;
31338 _tmp27_ = lbe;
31339 _tmp28_ = bala_binary_expression_get_is_chained (_tmp27_);
31340 _tmp29_ = _tmp28_;
31341 if (_tmp29_) {
31342 BalaCCodeBinaryExpression* _tmp30_;
31343 BalaCCodeExpression* _tmp31_;
31344 BalaCCodeExpression* _tmp32_;
31345 BalaCCodeBinaryExpression* _tmp33_;
31346 _tmp30_ = clbe;
31347 _tmp31_ = bala_ccode_binary_expression_get_right (_tmp30_);
31348 _tmp32_ = _tmp31_;
31349 _tmp33_ = _bala_ccode_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp32_, BALA_TYPE_CCODE_BINARY_EXPRESSION, BalaCCodeBinaryExpression)(((BalaCCodeBinaryExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp32_), ((bala_ccode_binary_expression_get_type ())))))
);
31350 _bala_ccode_node_unref0 (clbe)((clbe == ((void*)0)) ? ((void*)0) : (clbe = (bala_ccode_node_unref
(clbe), ((void*)0))))
;
31351 clbe = _tmp33_;
31352 }
31353 _tmp34_ = bala_ccode_base_module_get_ccode (self);
31354 _tmp35_ = _tmp34_;
31355 _tmp36_ = cvar;
31356 _tmp37_ = lbe;
31357 _tmp38_ = bala_binary_expression_get_right (_tmp37_);
31358 _tmp39_ = _tmp38_;
31359 _tmp40_ = bala_get_cvalue (_tmp39_);
31360 bala_ccode_function_add_assignment (_tmp35_, _tmp36_, _tmp40_);
31361 _tmp41_ = clbe;
31362 _tmp42_ = temp_decl;
31363 _tmp43_ = bala_symbol_get_name ((BalaSymbol*) _tmp42_);
31364 _tmp44_ = _tmp43_;
31365 _tmp45_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp44_);
31366 _tmp46_ = _tmp45_;
31367 bala_ccode_binary_expression_set_right (_tmp41_, _tmp46_);
31368 _bala_ccode_node_unref0 (_tmp46_)((_tmp46_ == ((void*)0)) ? ((void*)0) : (_tmp46_ = (bala_ccode_node_unref
(_tmp46_), ((void*)0))))
;
31369 _tmp47_ = cleft;
31370 _tmp48_ = _bala_ccode_node_ref0 (_tmp47_);
31371 _bala_ccode_node_unref0 (left_chain)((left_chain == ((void*)0)) ? ((void*)0) : (left_chain = (bala_ccode_node_unref
(left_chain), ((void*)0))))
;
31372 left_chain = _tmp48_;
31373 _tmp49_ = cvar;
31374 _tmp50_ = _bala_ccode_node_ref0 (_tmp49_);
31375 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
31376 cleft = _tmp50_;
31377 _bala_ccode_node_unref0 (clbe)((clbe == ((void*)0)) ? ((void*)0) : (clbe = (bala_ccode_node_unref
(clbe), ((void*)0))))
;
31378 _bala_ccode_node_unref0 (cvar)((cvar == ((void*)0)) ? ((void*)0) : (cvar = (bala_ccode_node_unref
(cvar), ((void*)0))))
;
31379 _bala_code_node_unref0 (temp_decl)((temp_decl == ((void*)0)) ? ((void*)0) : (temp_decl = (bala_code_node_unref
(temp_decl), ((void*)0))))
;
31380 _bala_code_node_unref0 (lbe)((lbe == ((void*)0)) ? ((void*)0) : (lbe = (bala_code_node_unref
(lbe), ((void*)0))))
;
31381 }
31382 _tmp51_ = bala_binary_expression_get_operator (expr);
31383 _tmp52_ = _tmp51_;
31384 switch (_tmp52_) {
31385 case BALA_BINARY_OPERATOR_PLUS:
31386 {
31387 op = BALA_CCODE_BINARY_OPERATOR_PLUS;
31388 break;
31389 }
31390 case BALA_BINARY_OPERATOR_MINUS:
31391 {
31392 op = BALA_CCODE_BINARY_OPERATOR_MINUS;
31393 break;
31394 }
31395 case BALA_BINARY_OPERATOR_MUL:
31396 {
31397 op = BALA_CCODE_BINARY_OPERATOR_MUL;
31398 break;
31399 }
31400 case BALA_BINARY_OPERATOR_DIV:
31401 {
31402 op = BALA_CCODE_BINARY_OPERATOR_DIV;
31403 break;
31404 }
31405 case BALA_BINARY_OPERATOR_MOD:
31406 {
31407 BalaDataType* _tmp53_;
31408 BalaDataType* _tmp54_;
31409 BalaDataType* _tmp55_;
31410 _tmp53_ = bala_expression_get_value_type ((BalaExpression*) expr);
31411 _tmp54_ = _tmp53_;
31412 _tmp55_ = self->double_type;
31413 if (bala_data_type_equals (_tmp54_, _tmp55_)) {
31414 BalaCCodeFile* _tmp56_;
31415 BalaCCodeFunctionCall* ccall = NULL((void*)0);
31416 BalaCCodeIdentifier* _tmp57_;
31417 BalaCCodeIdentifier* _tmp58_;
31418 BalaCCodeFunctionCall* _tmp59_;
31419 BalaCCodeFunctionCall* _tmp60_;
31420 BalaCCodeFunctionCall* _tmp61_;
31421 BalaCCodeExpression* _tmp62_;
31422 BalaCCodeFunctionCall* _tmp63_;
31423 BalaCCodeExpression* _tmp64_;
31424 BalaCCodeFunctionCall* _tmp65_;
31425 _tmp56_ = self->cfile;
31426 bala_ccode_file_add_include (_tmp56_, "math.h", FALSE(0));
31427 _tmp57_ = bala_ccode_identifier_new ("fmod");
31428 _tmp58_ = _tmp57_;
31429 _tmp59_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp58_);
31430 _tmp60_ = _tmp59_;
31431 _bala_ccode_node_unref0 (_tmp58_)((_tmp58_ == ((void*)0)) ? ((void*)0) : (_tmp58_ = (bala_ccode_node_unref
(_tmp58_), ((void*)0))))
;
31432 ccall = _tmp60_;
31433 _tmp61_ = ccall;
31434 _tmp62_ = cleft;
31435 bala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
31436 _tmp63_ = ccall;
31437 _tmp64_ = cright;
31438 bala_ccode_function_call_add_argument (_tmp63_, _tmp64_);
31439 _tmp65_ = ccall;
31440 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp65_);
31441 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
31442 _bala_ccode_node_unref0 (left_chain)((left_chain == ((void*)0)) ? ((void*)0) : (left_chain = (bala_ccode_node_unref
(left_chain), ((void*)0))))
;
31443 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
31444 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
31445 return;
31446 } else {
31447 BalaDataType* _tmp66_;
31448 BalaDataType* _tmp67_;
31449 BalaDataType* _tmp68_;
31450 _tmp66_ = bala_expression_get_value_type ((BalaExpression*) expr);
31451 _tmp67_ = _tmp66_;
31452 _tmp68_ = self->float_type;
31453 if (bala_data_type_equals (_tmp67_, _tmp68_)) {
31454 BalaCCodeFile* _tmp69_;
31455 BalaCCodeFunctionCall* ccall = NULL((void*)0);
31456 BalaCCodeIdentifier* _tmp70_;
31457 BalaCCodeIdentifier* _tmp71_;
31458 BalaCCodeFunctionCall* _tmp72_;
31459 BalaCCodeFunctionCall* _tmp73_;
31460 BalaCCodeFunctionCall* _tmp74_;
31461 BalaCCodeExpression* _tmp75_;
31462 BalaCCodeFunctionCall* _tmp76_;
31463 BalaCCodeExpression* _tmp77_;
31464 BalaCCodeFunctionCall* _tmp78_;
31465 _tmp69_ = self->cfile;
31466 bala_ccode_file_add_include (_tmp69_, "math.h", FALSE(0));
31467 _tmp70_ = bala_ccode_identifier_new ("fmodf");
31468 _tmp71_ = _tmp70_;
31469 _tmp72_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp71_);
31470 _tmp73_ = _tmp72_;
31471 _bala_ccode_node_unref0 (_tmp71_)((_tmp71_ == ((void*)0)) ? ((void*)0) : (_tmp71_ = (bala_ccode_node_unref
(_tmp71_), ((void*)0))))
;
31472 ccall = _tmp73_;
31473 _tmp74_ = ccall;
31474 _tmp75_ = cleft;
31475 bala_ccode_function_call_add_argument (_tmp74_, _tmp75_);
31476 _tmp76_ = ccall;
31477 _tmp77_ = cright;
31478 bala_ccode_function_call_add_argument (_tmp76_, _tmp77_);
31479 _tmp78_ = ccall;
31480 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp78_);
31481 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
31482 _bala_ccode_node_unref0 (left_chain)((left_chain == ((void*)0)) ? ((void*)0) : (left_chain = (bala_ccode_node_unref
(left_chain), ((void*)0))))
;
31483 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
31484 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
31485 return;
31486 } else {
31487 op = BALA_CCODE_BINARY_OPERATOR_MOD;
31488 }
31489 }
31490 break;
31491 }
31492 case BALA_BINARY_OPERATOR_SHIFT_LEFT:
31493 {
31494 op = BALA_CCODE_BINARY_OPERATOR_SHIFT_LEFT;
31495 break;
31496 }
31497 case BALA_BINARY_OPERATOR_SHIFT_RIGHT:
31498 {
31499 op = BALA_CCODE_BINARY_OPERATOR_SHIFT_RIGHT;
31500 break;
31501 }
31502 case BALA_BINARY_OPERATOR_LESS_THAN:
31503 {
31504 op = BALA_CCODE_BINARY_OPERATOR_LESS_THAN;
31505 break;
31506 }
31507 case BALA_BINARY_OPERATOR_GREATER_THAN:
31508 {
31509 op = BALA_CCODE_BINARY_OPERATOR_GREATER_THAN;
31510 break;
31511 }
31512 case BALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
31513 {
31514 op = BALA_CCODE_BINARY_OPERATOR_LESS_THAN_OR_EQUAL;
31515 break;
31516 }
31517 case BALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
31518 {
31519 op = BALA_CCODE_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL;
31520 break;
31521 }
31522 case BALA_BINARY_OPERATOR_EQUALITY:
31523 {
31524 op = BALA_CCODE_BINARY_OPERATOR_EQUALITY;
31525 break;
31526 }
31527 case BALA_BINARY_OPERATOR_INEQUALITY:
31528 {
31529 op = BALA_CCODE_BINARY_OPERATOR_INEQUALITY;
31530 break;
31531 }
31532 case BALA_BINARY_OPERATOR_BITWISE_AND:
31533 {
31534 op = BALA_CCODE_BINARY_OPERATOR_BITWISE_AND;
31535 break;
31536 }
31537 case BALA_BINARY_OPERATOR_BITWISE_OR:
31538 {
31539 op = BALA_CCODE_BINARY_OPERATOR_BITWISE_OR;
31540 break;
31541 }
31542 case BALA_BINARY_OPERATOR_BITWISE_XOR:
31543 {
31544 op = BALA_CCODE_BINARY_OPERATOR_BITWISE_XOR;
31545 break;
31546 }
31547 case BALA_BINARY_OPERATOR_AND:
31548 {
31549 op = BALA_CCODE_BINARY_OPERATOR_AND;
31550 break;
31551 }
31552 case BALA_BINARY_OPERATOR_OR:
31553 {
31554 op = BALA_CCODE_BINARY_OPERATOR_OR;
31555 break;
31556 }
31557 case BALA_BINARY_OPERATOR_IN:
31558 {
31559 BalaExpression* _tmp79_;
31560 BalaExpression* _tmp80_;
31561 BalaDataType* _tmp81_;
31562 BalaDataType* _tmp82_;
31563 _tmp79_ = bala_binary_expression_get_right (expr);
31564 _tmp80_ = _tmp79_;
31565 _tmp81_ = bala_expression_get_value_type (_tmp80_);
31566 _tmp82_ = _tmp81_;
31567 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp82_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp82_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
31568 BalaArrayType* array_type = NULL((void*)0);
31569 BalaExpression* _tmp83_;
31570 BalaExpression* _tmp84_;
31571 BalaDataType* _tmp85_;
31572 BalaDataType* _tmp86_;
31573 BalaDataType* element_type = NULL((void*)0);
31574 BalaArrayType* _tmp87_;
31575 BalaDataType* _tmp88_;
31576 BalaDataType* _tmp89_;
31577 BalaCCodeFunctionCall* ccall = NULL((void*)0);
31578 BalaArrayType* _tmp90_;
31579 gchar* _tmp91_;
31580 gchar* _tmp92_;
31581 BalaCCodeIdentifier* _tmp93_;
31582 BalaCCodeIdentifier* _tmp94_;
31583 BalaCCodeFunctionCall* _tmp95_;
31584 BalaCCodeFunctionCall* _tmp96_;
31585 BalaCCodeExpression* node = NULL((void*)0);
31586 BalaCCodeFunctionCall* _tmp97_;
31587 BalaCCodeExpression* _tmp98_;
31588 BalaCCodeFunctionCall* _tmp99_;
31589 BalaCCodeExpression* _tmp100_;
31590 BalaCCodeFunctionCall* _tmp101_;
31591 BalaExpression* _tmp102_;
31592 BalaExpression* _tmp103_;
31593 BalaCCodeExpression* _tmp104_;
31594 BalaCCodeExpression* _tmp105_;
31595 BalaDataType* _tmp106_;
31596 BalaCCodeExpression* _tmp146_;
31597 _tmp83_ = bala_binary_expression_get_right (expr);
31598 _tmp84_ = _tmp83_;
31599 _tmp85_ = bala_expression_get_value_type (_tmp84_);
31600 _tmp86_ = _tmp85_;
31601 array_type = G_TYPE_CHECK_INSTANCE_CAST (_tmp86_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp86_), ((bala_array_type_get_type ())))))
;
31602 _tmp87_ = array_type;
31603 _tmp88_ = bala_array_type_get_element_type (_tmp87_);
31604 _tmp89_ = _tmp88_;
31605 element_type = _tmp89_;
31606 _tmp90_ = array_type;
31607 _tmp91_ = bala_ccode_base_module_generate_array_contains_wrapper (self, _tmp90_);
31608 _tmp92_ = _tmp91_;
31609 _tmp93_ = bala_ccode_identifier_new (_tmp92_);
31610 _tmp94_ = _tmp93_;
31611 _tmp95_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp94_);
31612 _tmp96_ = _tmp95_;
31613 _bala_ccode_node_unref0 (_tmp94_)((_tmp94_ == ((void*)0)) ? ((void*)0) : (_tmp94_ = (bala_ccode_node_unref
(_tmp94_), ((void*)0))))
;
31614 _g_free0 (_tmp92_)(_tmp92_ = (g_free (_tmp92_), ((void*)0)));
31615 ccall = _tmp96_;
31616 _tmp97_ = ccall;
31617 _tmp98_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp97_);
31618 node = _tmp98_;
31619 _tmp99_ = ccall;
31620 _tmp100_ = cright;
31621 bala_ccode_function_call_add_argument (_tmp99_, _tmp100_);
31622 _tmp101_ = ccall;
31623 _tmp102_ = bala_binary_expression_get_right (expr);
31624 _tmp103_ = _tmp102_;
31625 _tmp104_ = bala_ccode_base_module_get_array_length_cexpression (self, _tmp103_, -1);
31626 _tmp105_ = _tmp104_;
31627 bala_ccode_function_call_add_argument (_tmp101_, _tmp105_);
31628 _bala_ccode_node_unref0 (_tmp105_)((_tmp105_ == ((void*)0)) ? ((void*)0) : (_tmp105_ = (bala_ccode_node_unref
(_tmp105_), ((void*)0))))
;
31629 _tmp106_ = element_type;
31630 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp106_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp106_); GType __t = ((bala_struct_value_type_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
31631 BalaCCodeFunctionCall* _tmp107_;
31632 BalaCCodeExpression* _tmp108_;
31633 BalaCCodeUnaryExpression* _tmp109_;
31634 BalaCCodeUnaryExpression* _tmp110_;
31635 _tmp107_ = ccall;
31636 _tmp108_ = cleft;
31637 _tmp109_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp108_);
31638 _tmp110_ = _tmp109_;
31639 bala_ccode_function_call_add_argument (_tmp107_, (BalaCCodeExpression*) _tmp110_);
31640 _bala_ccode_node_unref0 (_tmp110_)((_tmp110_ == ((void*)0)) ? ((void*)0) : (_tmp110_ = (bala_ccode_node_unref
(_tmp110_), ((void*)0))))
;
31641 } else {
31642 gboolean _tmp111_ = FALSE(0);
31643 gboolean _tmp112_ = FALSE(0);
31644 gboolean _tmp113_ = FALSE(0);
31645 BalaDataType* _tmp114_;
31646 _tmp114_ = element_type;
31647 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp114_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp114_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
31648 BalaDataType* _tmp115_;
31649 gboolean _tmp116_;
31650 gboolean _tmp117_;
31651 _tmp115_ = element_type;
31652 _tmp116_ = bala_data_type_get_nullable (_tmp115_);
31653 _tmp117_ = _tmp116_;
31654 _tmp113_ = !_tmp117_;
31655 } else {
31656 _tmp113_ = FALSE(0);
31657 }
31658 if (_tmp113_) {
31659 BalaExpression* _tmp118_;
31660 BalaExpression* _tmp119_;
31661 BalaDataType* _tmp120_;
31662 BalaDataType* _tmp121_;
31663 _tmp118_ = bala_binary_expression_get_left (expr);
31664 _tmp119_ = _tmp118_;
31665 _tmp120_ = bala_expression_get_value_type (_tmp119_);
31666 _tmp121_ = _tmp120_;
31667 _tmp112_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp121_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp121_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
31668 } else {
31669 _tmp112_ = FALSE(0);
31670 }
31671 if (_tmp112_) {
31672 BalaExpression* _tmp122_;
31673 BalaExpression* _tmp123_;
31674 BalaDataType* _tmp124_;
31675 BalaDataType* _tmp125_;
31676 gboolean _tmp126_;
31677 gboolean _tmp127_;
31678 _tmp122_ = bala_binary_expression_get_left (expr);
31679 _tmp123_ = _tmp122_;
31680 _tmp124_ = bala_expression_get_value_type (_tmp123_);
31681 _tmp125_ = _tmp124_;
31682 _tmp126_ = bala_data_type_get_nullable (_tmp125_);
31683 _tmp127_ = _tmp126_;
31684 _tmp111_ = _tmp127_;
31685 } else {
31686 _tmp111_ = FALSE(0);
31687 }
31688 if (_tmp111_) {
31689 BalaCCodeBinaryExpression* cnull = NULL((void*)0);
31690 BalaCCodeExpression* _tmp128_;
31691 BalaCCodeConstant* _tmp129_;
31692 BalaCCodeConstant* _tmp130_;
31693 BalaCCodeBinaryExpression* _tmp131_;
31694 BalaCCodeBinaryExpression* _tmp132_;
31695 BalaCCodeFunctionCall* _tmp133_;
31696 BalaCCodeExpression* _tmp134_;
31697 BalaCCodeUnaryExpression* _tmp135_;
31698 BalaCCodeUnaryExpression* _tmp136_;
31699 BalaCCodeBinaryExpression* _tmp137_;
31700 BalaCCodeConstant* _tmp138_;
31701 BalaCCodeConstant* _tmp139_;
31702 BalaCCodeFunctionCall* _tmp140_;
31703 BalaCCodeConditionalExpression* _tmp141_;
31704 BalaCCodeConditionalExpression* _tmp142_;
31705 BalaCCodeParenthesizedExpression* _tmp143_;
31706 _tmp128_ = cleft;
31707 _tmp129_ = bala_ccode_constant_new ("NULL");
31708 _tmp130_ = _tmp129_;
31709 _tmp131_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, _tmp128_, (BalaCCodeExpression*) _tmp130_);
31710 _tmp132_ = _tmp131_;
31711 _bala_ccode_node_unref0 (_tmp130_)((_tmp130_ == ((void*)0)) ? ((void*)0) : (_tmp130_ = (bala_ccode_node_unref
(_tmp130_), ((void*)0))))
;
31712 cnull = _tmp132_;
31713 _tmp133_ = ccall;
31714 _tmp134_ = cleft;
31715 _tmp135_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp134_);
31716 _tmp136_ = _tmp135_;
31717 bala_ccode_function_call_add_argument (_tmp133_, (BalaCCodeExpression*) _tmp136_);
31718 _bala_ccode_node_unref0 (_tmp136_)((_tmp136_ == ((void*)0)) ? ((void*)0) : (_tmp136_ = (bala_ccode_node_unref
(_tmp136_), ((void*)0))))
;
31719 _tmp137_ = cnull;
31720 _tmp138_ = bala_ccode_constant_new ("FALSE");
31721 _tmp139_ = _tmp138_;
31722 _tmp140_ = ccall;
31723 _tmp141_ = bala_ccode_conditional_expression_new ((BalaCCodeExpression*) _tmp137_, (BalaCCodeExpression*) _tmp139_, (BalaCCodeExpression*) _tmp140_);
31724 _tmp142_ = _tmp141_;
31725 _tmp143_ = bala_ccode_parenthesized_expression_new ((BalaCCodeExpression*) _tmp142_);
31726 _bala_ccode_node_unref0 (node)((node == ((void*)0)) ? ((void*)0) : (node = (bala_ccode_node_unref
(node), ((void*)0))))
;
31727 node = (BalaCCodeExpression*) _tmp143_;
31728 _bala_ccode_node_unref0 (_tmp142_)((_tmp142_ == ((void*)0)) ? ((void*)0) : (_tmp142_ = (bala_ccode_node_unref
(_tmp142_), ((void*)0))))
;
31729 _bala_ccode_node_unref0 (_tmp139_)((_tmp139_ == ((void*)0)) ? ((void*)0) : (_tmp139_ = (bala_ccode_node_unref
(_tmp139_), ((void*)0))))
;
31730 _bala_ccode_node_unref0 (cnull)((cnull == ((void*)0)) ? ((void*)0) : (cnull = (bala_ccode_node_unref
(cnull), ((void*)0))))
;
31731 } else {
31732 BalaCCodeFunctionCall* _tmp144_;
31733 BalaCCodeExpression* _tmp145_;
31734 _tmp144_ = ccall;
31735 _tmp145_ = cleft;
31736 bala_ccode_function_call_add_argument (_tmp144_, _tmp145_);
31737 }
31738 }
31739 _tmp146_ = node;
31740 bala_set_cvalue ((BalaExpression*) expr, _tmp146_);
31741 _bala_ccode_node_unref0 (node)((node == ((void*)0)) ? ((void*)0) : (node = (bala_ccode_node_unref
(node), ((void*)0))))
;
31742 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
31743 } else {
31744 BalaCCodeExpression* _tmp147_;
31745 BalaCCodeExpression* _tmp148_;
31746 BalaCCodeBinaryExpression* _tmp149_;
31747 BalaCCodeBinaryExpression* _tmp150_;
31748 BalaCCodeExpression* _tmp151_;
31749 BalaCCodeBinaryExpression* _tmp152_;
31750 BalaCCodeBinaryExpression* _tmp153_;
31751 _tmp147_ = cright;
31752 _tmp148_ = cleft;
31753 _tmp149_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_BITWISE_AND, _tmp147_, _tmp148_);
31754 _tmp150_ = _tmp149_;
31755 _tmp151_ = cleft;
31756 _tmp152_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp150_, _tmp151_);
31757 _tmp153_ = _tmp152_;
31758 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp153_);
31759 _bala_ccode_node_unref0 (_tmp153_)((_tmp153_ == ((void*)0)) ? ((void*)0) : (_tmp153_ = (bala_ccode_node_unref
(_tmp153_), ((void*)0))))
;
31760 _bala_ccode_node_unref0 (_tmp150_)((_tmp150_ == ((void*)0)) ? ((void*)0) : (_tmp150_ = (bala_ccode_node_unref
(_tmp150_), ((void*)0))))
;
31761 }
31762 _bala_ccode_node_unref0 (left_chain)((left_chain == ((void*)0)) ? ((void*)0) : (left_chain = (bala_ccode_node_unref
(left_chain), ((void*)0))))
;
31763 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
31764 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
31765 return;
31766 }
31767 default:
31768 {
31769 g_assert_not_reached ()do { g_assertion_message_expr ("bala-ccodegen", "balaccodebasemodule.c"
, 31769, ((const char*) (__func__)), ((void*)0)); } while (0)
;
31770 }
31771 }
31772 _tmp155_ = bala_binary_expression_get_operator (expr);
31773 _tmp156_ = _tmp155_;
31774 if (_tmp156_ == BALA_BINARY_OPERATOR_EQUALITY) {
31775 _tmp154_ = TRUE(!(0));
31776 } else {
31777 BalaBinaryOperator _tmp157_;
31778 BalaBinaryOperator _tmp158_;
31779 _tmp157_ = bala_binary_expression_get_operator (expr);
31780 _tmp158_ = _tmp157_;
31781 _tmp154_ = _tmp158_ == BALA_BINARY_OPERATOR_INEQUALITY;
31782 }
31783 if (_tmp154_) {
31784 BalaDataType* left_type = NULL((void*)0);
31785 BalaExpression* _tmp159_;
31786 BalaExpression* _tmp160_;
31787 BalaDataType* _tmp161_;
31788 BalaDataType* _tmp162_;
31789 BalaDataType* _tmp163_;
31790 BalaDataType* right_type = NULL((void*)0);
31791 BalaExpression* _tmp164_;
31792 BalaExpression* _tmp165_;
31793 BalaDataType* _tmp166_;
31794 BalaDataType* _tmp167_;
31795 BalaDataType* _tmp168_;
31796 gboolean _tmp169_ = FALSE(0);
31797 BalaDataType* _tmp170_;
31798 _tmp159_ = bala_binary_expression_get_left (expr);
31799 _tmp160_ = _tmp159_;
31800 _tmp161_ = bala_expression_get_target_type (_tmp160_);
31801 _tmp162_ = _tmp161_;
31802 _tmp163_ = _bala_code_node_ref0 (_tmp162_);
31803 left_type = _tmp163_;
31804 _tmp164_ = bala_binary_expression_get_right (expr);
31805 _tmp165_ = _tmp164_;
31806 _tmp166_ = bala_expression_get_target_type (_tmp165_);
31807 _tmp167_ = _tmp166_;
31808 _tmp168_ = _bala_code_node_ref0 (_tmp167_);
31809 right_type = _tmp168_;
31810 bala_ccode_base_module_make_comparable_cexpression (self, &left_type, &cleft, &right_type, &cright);
31811 _tmp170_ = left_type;
31812 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp170_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp170_); GType __t = ((bala_struct_value_type_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
31813 BalaDataType* _tmp171_;
31814 _tmp171_ = right_type;
31815 _tmp169_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp171_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp171_); GType __t = ((bala_struct_value_type_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
;
31816 } else {
31817 _tmp169_ = FALSE(0);
31818 }
31819 if (_tmp169_) {
31820 gchar* equalfunc = NULL((void*)0);
31821 BalaDataType* _tmp172_;
31822 BalaTypeSymbol* _tmp173_;
31823 BalaTypeSymbol* _tmp174_;
31824 gchar* _tmp175_;
31825 BalaCCodeFunctionCall* ccall = NULL((void*)0);
31826 const gchar* _tmp176_;
31827 BalaCCodeIdentifier* _tmp177_;
31828 BalaCCodeIdentifier* _tmp178_;
31829 BalaCCodeFunctionCall* _tmp179_;
31830 BalaCCodeFunctionCall* _tmp180_;
31831 BalaCCodeFunctionCall* _tmp181_;
31832 BalaCCodeExpression* _tmp182_;
31833 BalaCCodeFunctionCall* _tmp183_;
31834 BalaCCodeExpression* _tmp184_;
31835 BalaCCodeFunctionCall* _tmp185_;
31836 BalaCCodeExpression* _tmp186_;
31837 BalaCCodeExpression* _tmp187_;
31838 _tmp172_ = left_type;
31839 _tmp173_ = bala_data_type_get_type_symbol (_tmp172_);
31840 _tmp174_ = _tmp173_;
31841 _tmp175_ = bala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp174_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp174_), ((bala_struct_get_type ())))))
);
31842 equalfunc = _tmp175_;
31843 _tmp176_ = equalfunc;
31844 _tmp177_ = bala_ccode_identifier_new (_tmp176_);
31845 _tmp178_ = _tmp177_;
31846 _tmp179_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp178_);
31847 _tmp180_ = _tmp179_;
31848 _bala_ccode_node_unref0 (_tmp178_)((_tmp178_ == ((void*)0)) ? ((void*)0) : (_tmp178_ = (bala_ccode_node_unref
(_tmp178_), ((void*)0))))
;
31849 ccall = _tmp180_;
31850 _tmp181_ = ccall;
31851 _tmp182_ = cleft;
31852 bala_ccode_function_call_add_argument (_tmp181_, _tmp182_);
31853 _tmp183_ = ccall;
31854 _tmp184_ = cright;
31855 bala_ccode_function_call_add_argument (_tmp183_, _tmp184_);
31856 _tmp185_ = ccall;
31857 _tmp186_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp185_);
31858 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
31859 cleft = _tmp186_;
31860 _tmp187_ = bala_ccode_base_module_get_boolean_cconstant (self, TRUE(!(0)));
31861 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
31862 cright = _tmp187_;
31863 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
31864 _g_free0 (equalfunc)(equalfunc = (g_free (equalfunc), ((void*)0)));
31865 } else {
31866 gboolean _tmp188_ = FALSE(0);
31867 gboolean _tmp189_ = FALSE(0);
31868 gboolean _tmp190_ = FALSE(0);
31869 gboolean _tmp191_ = FALSE(0);
31870 gboolean _tmp192_ = FALSE(0);
31871 gboolean _tmp193_ = FALSE(0);
31872 BalaDataType* _tmp194_;
31873 _tmp194_ = left_type;
31874 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp194_, BALA_TYPE_INTEGER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp194_); GType __t = ((bala_integer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
31875 _tmp193_ = TRUE(!(0));
31876 } else {
31877 BalaDataType* _tmp195_;
31878 _tmp195_ = left_type;
31879 _tmp193_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp195_, BALA_TYPE_FLOATING_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp195_); GType __t = ((bala_floating_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
31880 }
31881 if (_tmp193_) {
31882 _tmp192_ = TRUE(!(0));
31883 } else {
31884 BalaDataType* _tmp196_;
31885 _tmp196_ = left_type;
31886 _tmp192_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp196_, BALA_TYPE_BOOLEAN_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp196_); GType __t = ((bala_boolean_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
31887 }
31888 if (_tmp192_) {
31889 _tmp191_ = TRUE(!(0));
31890 } else {
31891 BalaDataType* _tmp197_;
31892 _tmp197_ = left_type;
31893 _tmp191_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp197_, BALA_TYPE_ENUM_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp197_); GType __t = ((bala_enum_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
31894 }
31895 if (_tmp191_) {
31896 BalaDataType* _tmp198_;
31897 gboolean _tmp199_;
31898 gboolean _tmp200_;
31899 _tmp198_ = left_type;
31900 _tmp199_ = bala_data_type_get_nullable (_tmp198_);
31901 _tmp200_ = _tmp199_;
31902 _tmp190_ = _tmp200_;
31903 } else {
31904 _tmp190_ = FALSE(0);
31905 }
31906 if (_tmp190_) {
31907 gboolean _tmp201_ = FALSE(0);
31908 gboolean _tmp202_ = FALSE(0);
31909 gboolean _tmp203_ = FALSE(0);
31910 BalaDataType* _tmp204_;
31911 _tmp204_ = right_type;
31912 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp204_, BALA_TYPE_INTEGER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp204_); GType __t = ((bala_integer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
31913 _tmp203_ = TRUE(!(0));
31914 } else {
31915 BalaDataType* _tmp205_;
31916 _tmp205_ = right_type;
31917 _tmp203_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp205_, BALA_TYPE_FLOATING_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp205_); GType __t = ((bala_floating_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
31918 }
31919 if (_tmp203_) {
31920 _tmp202_ = TRUE(!(0));
31921 } else {
31922 BalaDataType* _tmp206_;
31923 _tmp206_ = right_type;
31924 _tmp202_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp206_, BALA_TYPE_BOOLEAN_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp206_); GType __t = ((bala_boolean_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
31925 }
31926 if (_tmp202_) {
31927 _tmp201_ = TRUE(!(0));
31928 } else {
31929 BalaDataType* _tmp207_;
31930 _tmp207_ = right_type;
31931 _tmp201_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp207_, BALA_TYPE_ENUM_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp207_); GType __t = ((bala_enum_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
31932 }
31933 _tmp189_ = _tmp201_;
31934 } else {
31935 _tmp189_ = FALSE(0);
31936 }
31937 if (_tmp189_) {
31938 BalaDataType* _tmp208_;
31939 gboolean _tmp209_;
31940 gboolean _tmp210_;
31941 _tmp208_ = right_type;
31942 _tmp209_ = bala_data_type_get_nullable (_tmp208_);
31943 _tmp210_ = _tmp209_;
31944 _tmp188_ = _tmp210_;
31945 } else {
31946 _tmp188_ = FALSE(0);
31947 }
31948 if (_tmp188_) {
31949 gchar* equalfunc = NULL((void*)0);
31950 BalaDataType* _tmp211_;
31951 BalaTypeSymbol* _tmp212_;
31952 BalaTypeSymbol* _tmp213_;
31953 gchar* _tmp214_;
31954 BalaCCodeFunctionCall* ccall = NULL((void*)0);
31955 const gchar* _tmp215_;
31956 BalaCCodeIdentifier* _tmp216_;
31957 BalaCCodeIdentifier* _tmp217_;
31958 BalaCCodeFunctionCall* _tmp218_;
31959 BalaCCodeFunctionCall* _tmp219_;
31960 BalaCCodeFunctionCall* _tmp220_;
31961 BalaCCodeExpression* _tmp221_;
31962 BalaCCodeFunctionCall* _tmp222_;
31963 BalaCCodeExpression* _tmp223_;
31964 BalaCCodeFunctionCall* _tmp224_;
31965 BalaCCodeExpression* _tmp225_;
31966 BalaCCodeExpression* _tmp226_;
31967 _tmp211_ = left_type;
31968 _tmp212_ = bala_data_type_get_type_symbol (_tmp211_);
31969 _tmp213_ = _tmp212_;
31970 _tmp214_ = bala_ccode_base_module_generate_numeric_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp213_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp213_), ((bala_typesymbol_get_type ())))))
);
31971 equalfunc = _tmp214_;
31972 _tmp215_ = equalfunc;
31973 _tmp216_ = bala_ccode_identifier_new (_tmp215_);
31974 _tmp217_ = _tmp216_;
31975 _tmp218_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp217_);
31976 _tmp219_ = _tmp218_;
31977 _bala_ccode_node_unref0 (_tmp217_)((_tmp217_ == ((void*)0)) ? ((void*)0) : (_tmp217_ = (bala_ccode_node_unref
(_tmp217_), ((void*)0))))
;
31978 ccall = _tmp219_;
31979 _tmp220_ = ccall;
31980 _tmp221_ = cleft;
31981 bala_ccode_function_call_add_argument (_tmp220_, _tmp221_);
31982 _tmp222_ = ccall;
31983 _tmp223_ = cright;
31984 bala_ccode_function_call_add_argument (_tmp222_, _tmp223_);
31985 _tmp224_ = ccall;
31986 _tmp225_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp224_);
31987 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
31988 cleft = _tmp225_;
31989 _tmp226_ = bala_ccode_base_module_get_boolean_cconstant (self, TRUE(!(0)));
31990 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
31991 cright = _tmp226_;
31992 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
31993 _g_free0 (equalfunc)(equalfunc = (g_free (equalfunc), ((void*)0)));
31994 }
31995 }
31996 _bala_code_node_unref0 (right_type)((right_type == ((void*)0)) ? ((void*)0) : (right_type = (bala_code_node_unref
(right_type), ((void*)0))))
;
31997 _bala_code_node_unref0 (left_type)((left_type == ((void*)0)) ? ((void*)0) : (left_type = (bala_code_node_unref
(left_type), ((void*)0))))
;
31998 }
31999 _tmp230_ = bala_binary_expression_get_left (expr);
32000 _tmp231_ = _tmp230_;
32001 _tmp232_ = bala_expression_get_value_type (_tmp231_);
32002 _tmp233_ = _tmp232_;
32003 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp233_, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp233_); GType __t = ((bala_null_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
32004 BalaExpression* _tmp234_;
32005 BalaExpression* _tmp235_;
32006 BalaDataType* _tmp236_;
32007 BalaDataType* _tmp237_;
32008 BalaDataType* _tmp238_;
32009 _tmp234_ = bala_binary_expression_get_left (expr);
32010 _tmp235_ = _tmp234_;
32011 _tmp236_ = bala_expression_get_value_type (_tmp235_);
32012 _tmp237_ = _tmp236_;
32013 _tmp238_ = self->string_type;
32014 _tmp229_ = bala_data_type_compatible (_tmp237_, _tmp238_);
32015 } else {
32016 _tmp229_ = FALSE(0);
32017 }
32018 if (_tmp229_) {
32019 BalaExpression* _tmp239_;
32020 BalaExpression* _tmp240_;
32021 BalaDataType* _tmp241_;
32022 BalaDataType* _tmp242_;
32023 _tmp239_ = bala_binary_expression_get_right (expr);
32024 _tmp240_ = _tmp239_;
32025 _tmp241_ = bala_expression_get_value_type (_tmp240_);
32026 _tmp242_ = _tmp241_;
32027 _tmp228_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp242_, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp242_); GType __t = ((bala_null_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
32028 } else {
32029 _tmp228_ = FALSE(0);
32030 }
32031 if (_tmp228_) {
32032 BalaExpression* _tmp243_;
32033 BalaExpression* _tmp244_;
32034 BalaDataType* _tmp245_;
32035 BalaDataType* _tmp246_;
32036 BalaDataType* _tmp247_;
32037 _tmp243_ = bala_binary_expression_get_right (expr);
32038 _tmp244_ = _tmp243_;
32039 _tmp245_ = bala_expression_get_value_type (_tmp244_);
32040 _tmp246_ = _tmp245_;
32041 _tmp247_ = self->string_type;
32042 _tmp227_ = bala_data_type_compatible (_tmp246_, _tmp247_);
32043 } else {
32044 _tmp227_ = FALSE(0);
32045 }
32046 is_string_comparison = _tmp227_;
32047 _tmp249_ = bala_binary_expression_get_left (expr);
32048 _tmp250_ = _tmp249_;
32049 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp250_, BALA_TYPE_STRING_LITERAL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp250_); GType __t = ((bala_string_literal_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
32050 _tmp248_ = TRUE(!(0));
32051 } else {
32052 BalaExpression* _tmp251_;
32053 BalaExpression* _tmp252_;
32054 _tmp251_ = bala_binary_expression_get_right (expr);
32055 _tmp252_ = _tmp251_;
32056 _tmp248_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp252_, BALA_TYPE_STRING_LITERAL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp252_); GType __t = ((bala_string_literal_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
32057 }
32058 has_string_literal = _tmp248_;
32059 if (is_string_comparison) {
32060 _tmp253_ = TRUE(!(0));
32061 } else {
32062 gboolean _tmp254_ = FALSE(0);
32063 if (has_string_literal) {
32064 BalaBinaryOperator _tmp255_;
32065 BalaBinaryOperator _tmp256_;
32066 _tmp255_ = bala_binary_expression_get_operator (expr);
32067 _tmp256_ = _tmp255_;
32068 _tmp254_ = _tmp256_ != BALA_BINARY_OPERATOR_PLUS;
32069 } else {
32070 _tmp254_ = FALSE(0);
32071 }
32072 _tmp253_ = _tmp254_;
32073 }
32074 if (_tmp253_) {
32075 BalaBinaryOperator _tmp257_;
32076 BalaBinaryOperator _tmp258_;
32077 _tmp257_ = bala_binary_expression_get_operator (expr);
32078 _tmp258_ = _tmp257_;
32079 switch (_tmp258_) {
32080 case BALA_BINARY_OPERATOR_PLUS:
32081 {
32082 gboolean _tmp259_ = FALSE(0);
32083 BalaExpression* _tmp260_;
32084 BalaExpression* _tmp261_;
32085 _tmp260_ = bala_binary_expression_get_left (expr);
32086 _tmp261_ = _tmp260_;
32087 if (bala_expression_is_constant (_tmp261_)) {
32088 BalaExpression* _tmp262_;
32089 BalaExpression* _tmp263_;
32090 _tmp262_ = bala_binary_expression_get_right (expr);
32091 _tmp263_ = _tmp262_;
32092 _tmp259_ = bala_expression_is_constant (_tmp263_);
32093 } else {
32094 _tmp259_ = FALSE(0);
32095 }
32096 if (_tmp259_) {
32097 gchar* left = NULL((void*)0);
32098 gchar* right = NULL((void*)0);
32099 BalaCCodeExpression* _tmp264_;
32100 BalaCCodeExpression* _tmp277_;
32101 const gchar* _tmp290_;
32102 const gchar* _tmp291_;
32103 gchar* _tmp292_;
32104 gchar* _tmp293_;
32105 BalaCCodeConstant* _tmp294_;
32106 BalaCCodeConstant* _tmp295_;
32107 _tmp264_ = cleft;
32108 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp264_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp264_); GType __t = ((bala_ccode_identifier_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
32109 BalaCCodeExpression* _tmp265_;
32110 const gchar* _tmp266_;
32111 const gchar* _tmp267_;
32112 gchar* _tmp268_;
32113 _tmp265_ = cleft;
32114 _tmp266_ = bala_ccode_identifier_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp265_, BALA_TYPE_CCODE_IDENTIFIER, BalaCCodeIdentifier)(((BalaCCodeIdentifier*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp265_), ((bala_ccode_identifier_get_type ())))))
);
32115 _tmp267_ = _tmp266_;
32116 _tmp268_ = g_strdup (_tmp267_);
32117 _g_free0 (left)(left = (g_free (left), ((void*)0)));
32118 left = _tmp268_;
32119 } else {
32120 BalaCCodeExpression* _tmp269_;
32121 _tmp269_ = cleft;
32122 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp269_, BALA_TYPE_CCODE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp269_); GType __t = ((bala_ccode_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
32123 BalaCCodeExpression* _tmp270_;
32124 const gchar* _tmp271_;
32125 const gchar* _tmp272_;
32126 gchar* _tmp273_;
32127 _tmp270_ = cleft;
32128 _tmp271_ = bala_ccode_constant_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp270_, BALA_TYPE_CCODE_CONSTANT, BalaCCodeConstant)(((BalaCCodeConstant*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp270_), ((bala_ccode_constant_get_type ())))))
);
32129 _tmp272_ = _tmp271_;
32130 _tmp273_ = g_strdup (_tmp272_);
32131 _g_free0 (left)(left = (g_free (left), ((void*)0)));
32132 left = _tmp273_;
32133 } else {
32134 BalaSourceReference* _tmp274_;
32135 BalaSourceReference* _tmp275_;
32136 gchar* _tmp276_;
32137 _tmp274_ = bala_code_node_get_source_reference ((BalaCodeNode*) expr);
32138 _tmp275_ = _tmp274_;
32139 bala_report_error (_tmp275_, "internal: Unsupported expression");
32140 _tmp276_ = g_strdup ("NULL");
32141 _g_free0 (left)(left = (g_free (left), ((void*)0)));
32142 left = _tmp276_;
32143 }
32144 }
32145 _tmp277_ = cright;
32146 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp277_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp277_); GType __t = ((bala_ccode_identifier_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
32147 BalaCCodeExpression* _tmp278_;
32148 const gchar* _tmp279_;
32149 const gchar* _tmp280_;
32150 gchar* _tmp281_;
32151 _tmp278_ = cright;
32152 _tmp279_ = bala_ccode_identifier_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp278_, BALA_TYPE_CCODE_IDENTIFIER, BalaCCodeIdentifier)(((BalaCCodeIdentifier*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp278_), ((bala_ccode_identifier_get_type ())))))
);
32153 _tmp280_ = _tmp279_;
32154 _tmp281_ = g_strdup (_tmp280_);
32155 _g_free0 (right)(right = (g_free (right), ((void*)0)));
32156 right = _tmp281_;
32157 } else {
32158 BalaCCodeExpression* _tmp282_;
32159 _tmp282_ = cright;
32160 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp282_, BALA_TYPE_CCODE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp282_); GType __t = ((bala_ccode_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
32161 BalaCCodeExpression* _tmp283_;
32162 const gchar* _tmp284_;
32163 const gchar* _tmp285_;
32164 gchar* _tmp286_;
32165 _tmp283_ = cright;
32166 _tmp284_ = bala_ccode_constant_get_name (G_TYPE_CHECK_INSTANCE_CAST (_tmp283_, BALA_TYPE_CCODE_CONSTANT, BalaCCodeConstant)(((BalaCCodeConstant*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp283_), ((bala_ccode_constant_get_type ())))))
);
32167 _tmp285_ = _tmp284_;
32168 _tmp286_ = g_strdup (_tmp285_);
32169 _g_free0 (right)(right = (g_free (right), ((void*)0)));
32170 right = _tmp286_;
32171 } else {
32172 BalaSourceReference* _tmp287_;
32173 BalaSourceReference* _tmp288_;
32174 gchar* _tmp289_;
32175 _tmp287_ = bala_code_node_get_source_reference ((BalaCodeNode*) expr);
32176 _tmp288_ = _tmp287_;
32177 bala_report_error (_tmp288_, "internal: Unsupported expression");
32178 _tmp289_ = g_strdup ("NULL");
32179 _g_free0 (right)(right = (g_free (right), ((void*)0)));
32180 right = _tmp289_;
32181 }
32182 }
32183 _tmp290_ = left;
32184 _tmp291_ = right;
32185 _tmp292_ = g_strdup_printf ("%s %s", _tmp290_, _tmp291_);
32186 _tmp293_ = _tmp292_;
32187 _tmp294_ = bala_ccode_constant_new (_tmp293_);
32188 _tmp295_ = _tmp294_;
32189 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp295_);
32190 _bala_ccode_node_unref0 (_tmp295_)((_tmp295_ == ((void*)0)) ? ((void*)0) : (_tmp295_ = (bala_ccode_node_unref
(_tmp295_), ((void*)0))))
;
32191 _g_free0 (_tmp293_)(_tmp293_ = (g_free (_tmp293_), ((void*)0)));
32192 _g_free0 (right)(right = (g_free (right), ((void*)0)));
32193 _g_free0 (left)(left = (g_free (left), ((void*)0)));
32194 } else {
32195 BalaTargetValue* temp_value = NULL((void*)0);
32196 BalaDataType* _tmp296_;
32197 BalaDataType* _tmp297_;
32198 BalaTargetValue* _tmp298_;
32199 BalaCCodeFunctionCall* ccall = NULL((void*)0);
32200 BalaCodeContext* _tmp299_;
32201 BalaProfile _tmp300_;
32202 BalaProfile _tmp301_;
32203 BalaCCodeFunction* _tmp353_;
32204 BalaCCodeFunction* _tmp354_;
32205 BalaTargetValue* _tmp355_;
32206 BalaCCodeExpression* _tmp356_;
32207 BalaCCodeFunctionCall* _tmp357_;
32208 BalaTargetValue* _tmp358_;
32209 _tmp296_ = bala_expression_get_value_type ((BalaExpression*) expr);
32210 _tmp297_ = _tmp296_;
32211 _tmp298_ = bala_ccode_base_module_create_temp_value (self, _tmp297_, FALSE(0), (BalaCodeNode*) expr, NULL((void*)0));
32212 temp_value = _tmp298_;
32213 _tmp299_ = self->priv->_context;
32214 _tmp300_ = bala_code_context_get_profile (_tmp299_);
32215 _tmp301_ = _tmp300_;
32216 if (_tmp301_ == BALA_PROFILE_POSIX) {
32217 BalaCCodeIdentifier* _tmp302_;
32218 BalaCCodeIdentifier* _tmp303_;
32219 BalaCCodeFunctionCall* _tmp304_;
32220 BalaCCodeFunctionCall* strcpy = NULL((void*)0);
32221 BalaCCodeIdentifier* _tmp305_;
32222 BalaCCodeIdentifier* _tmp306_;
32223 BalaCCodeFunctionCall* _tmp307_;
32224 BalaCCodeFunctionCall* _tmp308_;
32225 BalaCCodeFunctionCall* malloc = NULL((void*)0);
32226 BalaCCodeIdentifier* _tmp309_;
32227 BalaCCodeIdentifier* _tmp310_;
32228 BalaCCodeFunctionCall* _tmp311_;
32229 BalaCCodeFunctionCall* _tmp312_;
32230 BalaCCodeFunctionCall* strlen_a = NULL((void*)0);
32231 BalaCCodeIdentifier* _tmp313_;
32232 BalaCCodeIdentifier* _tmp314_;
32233 BalaCCodeFunctionCall* _tmp315_;
32234 BalaCCodeFunctionCall* _tmp316_;
32235 BalaCCodeFunctionCall* _tmp317_;
32236 BalaCCodeExpression* _tmp318_;
32237 BalaCCodeFunctionCall* strlen_b = NULL((void*)0);
32238 BalaCCodeIdentifier* _tmp319_;
32239 BalaCCodeIdentifier* _tmp320_;
32240 BalaCCodeFunctionCall* _tmp321_;
32241 BalaCCodeFunctionCall* _tmp322_;
32242 BalaCCodeFunctionCall* _tmp323_;
32243 BalaCCodeExpression* _tmp324_;
32244 BalaCCodeBinaryExpression* newlength = NULL((void*)0);
32245 BalaCCodeIdentifier* _tmp325_;
32246 BalaCCodeIdentifier* _tmp326_;
32247 BalaCCodeFunctionCall* _tmp327_;
32248 BalaCCodeFunctionCall* _tmp328_;
32249 BalaCCodeBinaryExpression* _tmp329_;
32250 BalaCCodeBinaryExpression* _tmp330_;
32251 BalaCCodeBinaryExpression* _tmp331_;
32252 BalaCCodeBinaryExpression* _tmp332_;
32253 BalaCCodeFunctionCall* _tmp333_;
32254 BalaCCodeBinaryExpression* _tmp334_;
32255 BalaCCodeFunctionCall* _tmp335_;
32256 BalaCCodeFunctionCall* _tmp336_;
32257 BalaCCodeFunctionCall* _tmp337_;
32258 BalaCCodeExpression* _tmp338_;
32259 BalaCCodeFunctionCall* _tmp339_;
32260 BalaCCodeFunctionCall* _tmp340_;
32261 BalaCCodeFunctionCall* _tmp341_;
32262 BalaCCodeExpression* _tmp342_;
32263 _tmp302_ = bala_ccode_identifier_new ("strcat");
32264 _tmp303_ = _tmp302_;
32265 _tmp304_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp303_);
32266 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32267 ccall = _tmp304_;
32268 _bala_ccode_node_unref0 (_tmp303_)((_tmp303_ == ((void*)0)) ? ((void*)0) : (_tmp303_ = (bala_ccode_node_unref
(_tmp303_), ((void*)0))))
;
32269 _tmp305_ = bala_ccode_identifier_new ("strcpy");
32270 _tmp306_ = _tmp305_;
32271 _tmp307_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp306_);
32272 _tmp308_ = _tmp307_;
32273 _bala_ccode_node_unref0 (_tmp306_)((_tmp306_ == ((void*)0)) ? ((void*)0) : (_tmp306_ = (bala_ccode_node_unref
(_tmp306_), ((void*)0))))
;
32274 strcpy = _tmp308_;
32275 _tmp309_ = bala_ccode_identifier_new ("malloc");
32276 _tmp310_ = _tmp309_;
32277 _tmp311_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp310_);
32278 _tmp312_ = _tmp311_;
32279 _bala_ccode_node_unref0 (_tmp310_)((_tmp310_ == ((void*)0)) ? ((void*)0) : (_tmp310_ = (bala_ccode_node_unref
(_tmp310_), ((void*)0))))
;
32280 malloc = _tmp312_;
32281 _tmp313_ = bala_ccode_identifier_new ("strlen");
32282 _tmp314_ = _tmp313_;
32283 _tmp315_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp314_);
32284 _tmp316_ = _tmp315_;
32285 _bala_ccode_node_unref0 (_tmp314_)((_tmp314_ == ((void*)0)) ? ((void*)0) : (_tmp314_ = (bala_ccode_node_unref
(_tmp314_), ((void*)0))))
;
32286 strlen_a = _tmp316_;
32287 _tmp317_ = strlen_a;
32288 _tmp318_ = cleft;
32289 bala_ccode_function_call_add_argument (_tmp317_, _tmp318_);
32290 _tmp319_ = bala_ccode_identifier_new ("strlen");
32291 _tmp320_ = _tmp319_;
32292 _tmp321_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp320_);
32293 _tmp322_ = _tmp321_;
32294 _bala_ccode_node_unref0 (_tmp320_)((_tmp320_ == ((void*)0)) ? ((void*)0) : (_tmp320_ = (bala_ccode_node_unref
(_tmp320_), ((void*)0))))
;
32295 strlen_b = _tmp322_;
32296 _tmp323_ = strlen_b;
32297 _tmp324_ = cright;
32298 bala_ccode_function_call_add_argument (_tmp323_, _tmp324_);
32299 _tmp325_ = bala_ccode_identifier_new ("1");
32300 _tmp326_ = _tmp325_;
32301 _tmp327_ = strlen_a;
32302 _tmp328_ = strlen_b;
32303 _tmp329_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_PLUS, (BalaCCodeExpression*) _tmp327_, (BalaCCodeExpression*) _tmp328_);
32304 _tmp330_ = _tmp329_;
32305 _tmp331_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_PLUS, (BalaCCodeExpression*) _tmp326_, (BalaCCodeExpression*) _tmp330_);
32306 _tmp332_ = _tmp331_;
32307 _bala_ccode_node_unref0 (_tmp330_)((_tmp330_ == ((void*)0)) ? ((void*)0) : (_tmp330_ = (bala_ccode_node_unref
(_tmp330_), ((void*)0))))
;
32308 _bala_ccode_node_unref0 (_tmp326_)((_tmp326_ == ((void*)0)) ? ((void*)0) : (_tmp326_ = (bala_ccode_node_unref
(_tmp326_), ((void*)0))))
;
32309 newlength = _tmp332_;
32310 _tmp333_ = malloc;
32311 _tmp334_ = newlength;
32312 bala_ccode_function_call_add_argument (_tmp333_, (BalaCCodeExpression*) _tmp334_);
32313 _tmp335_ = strcpy;
32314 _tmp336_ = malloc;
32315 bala_ccode_function_call_add_argument (_tmp335_, (BalaCCodeExpression*) _tmp336_);
32316 _tmp337_ = strcpy;
32317 _tmp338_ = cleft;
32318 bala_ccode_function_call_add_argument (_tmp337_, _tmp338_);
32319 _tmp339_ = ccall;
32320 _tmp340_ = strcpy;
32321 bala_ccode_function_call_add_argument (_tmp339_, (BalaCCodeExpression*) _tmp340_);
32322 _tmp341_ = ccall;
32323 _tmp342_ = cright;
32324 bala_ccode_function_call_add_argument (_tmp341_, _tmp342_);
32325 _bala_ccode_node_unref0 (newlength)((newlength == ((void*)0)) ? ((void*)0) : (newlength = (bala_ccode_node_unref
(newlength), ((void*)0))))
;
32326 _bala_ccode_node_unref0 (strlen_b)((strlen_b == ((void*)0)) ? ((void*)0) : (strlen_b = (bala_ccode_node_unref
(strlen_b), ((void*)0))))
;
32327 _bala_ccode_node_unref0 (strlen_a)((strlen_a == ((void*)0)) ? ((void*)0) : (strlen_a = (bala_ccode_node_unref
(strlen_a), ((void*)0))))
;
32328 _bala_ccode_node_unref0 (malloc)((malloc == ((void*)0)) ? ((void*)0) : (malloc = (bala_ccode_node_unref
(malloc), ((void*)0))))
;
32329 _bala_ccode_node_unref0 (strcpy)((strcpy == ((void*)0)) ? ((void*)0) : (strcpy = (bala_ccode_node_unref
(strcpy), ((void*)0))))
;
32330 } else {
32331 BalaCCodeIdentifier* _tmp343_;
32332 BalaCCodeIdentifier* _tmp344_;
32333 BalaCCodeFunctionCall* _tmp345_;
32334 BalaCCodeFunctionCall* _tmp346_;
32335 BalaCCodeExpression* _tmp347_;
32336 BalaCCodeFunctionCall* _tmp348_;
32337 BalaCCodeExpression* _tmp349_;
32338 BalaCCodeFunctionCall* _tmp350_;
32339 BalaCCodeConstant* _tmp351_;
32340 BalaCCodeConstant* _tmp352_;
32341 _tmp343_ = bala_ccode_identifier_new ("g_strconcat");
32342 _tmp344_ = _tmp343_;
32343 _tmp345_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp344_);
32344 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32345 ccall = _tmp345_;
32346 _bala_ccode_node_unref0 (_tmp344_)((_tmp344_ == ((void*)0)) ? ((void*)0) : (_tmp344_ = (bala_ccode_node_unref
(_tmp344_), ((void*)0))))
;
32347 _tmp346_ = ccall;
32348 _tmp347_ = cleft;
32349 bala_ccode_function_call_add_argument (_tmp346_, _tmp347_);
32350 _tmp348_ = ccall;
32351 _tmp349_ = cright;
32352 bala_ccode_function_call_add_argument (_tmp348_, _tmp349_);
32353 _tmp350_ = ccall;
32354 _tmp351_ = bala_ccode_constant_new ("NULL");
32355 _tmp352_ = _tmp351_;
32356 bala_ccode_function_call_add_argument (_tmp350_, (BalaCCodeExpression*) _tmp352_);
32357 _bala_ccode_node_unref0 (_tmp352_)((_tmp352_ == ((void*)0)) ? ((void*)0) : (_tmp352_ = (bala_ccode_node_unref
(_tmp352_), ((void*)0))))
;
32358 }
32359 _tmp353_ = bala_ccode_base_module_get_ccode (self);
32360 _tmp354_ = _tmp353_;
32361 _tmp355_ = temp_value;
32362 _tmp356_ = bala_get_cvalue_ (_tmp355_);
32363 _tmp357_ = ccall;
32364 bala_ccode_function_add_assignment (_tmp354_, _tmp356_, (BalaCCodeExpression*) _tmp357_);
32365 _tmp358_ = temp_value;
32366 bala_expression_set_target_value ((BalaExpression*) expr, _tmp358_);
32367 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32368 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
32369 }
32370 _bala_ccode_node_unref0 (left_chain)((left_chain == ((void*)0)) ? ((void*)0) : (left_chain = (bala_ccode_node_unref
(left_chain), ((void*)0))))
;
32371 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
32372 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
32373 return;
32374 }
32375 case BALA_BINARY_OPERATOR_EQUALITY:
32376 case BALA_BINARY_OPERATOR_INEQUALITY:
32377 case BALA_BINARY_OPERATOR_LESS_THAN:
32378 case BALA_BINARY_OPERATOR_GREATER_THAN:
32379 case BALA_BINARY_OPERATOR_LESS_THAN_OR_EQUAL:
32380 case BALA_BINARY_OPERATOR_GREATER_THAN_OR_EQUAL:
32381 {
32382 BalaCCodeFunctionCall* ccall = NULL((void*)0);
32383 BalaCodeContext* _tmp359_;
32384 BalaProfile _tmp360_;
32385 BalaProfile _tmp361_;
32386 BalaCCodeFunctionCall* _tmp373_;
32387 BalaCCodeExpression* _tmp374_;
32388 BalaCCodeFunctionCall* _tmp375_;
32389 BalaCCodeExpression* _tmp376_;
32390 BalaCCodeFunctionCall* _tmp377_;
32391 BalaCCodeExpression* _tmp378_;
32392 BalaCCodeConstant* _tmp379_;
32393 _tmp359_ = self->priv->_context;
32394 _tmp360_ = bala_code_context_get_profile (_tmp359_);
32395 _tmp361_ = _tmp360_;
32396 if (_tmp361_ == BALA_PROFILE_POSIX) {
32397 BalaCCodeFile* _tmp362_;
32398 BalaCCodeIdentifier* _tmp363_;
32399 BalaCCodeIdentifier* _tmp364_;
32400 gchar* _tmp365_;
32401 gchar* _tmp366_;
32402 BalaCCodeIdentifier* _tmp367_;
32403 BalaCCodeIdentifier* _tmp368_;
32404 BalaCCodeFunctionCall* _tmp369_;
32405 _tmp362_ = self->cfile;
32406 bala_ccode_file_add_include (_tmp362_, "string.h", FALSE(0));
32407 _tmp363_ = bala_ccode_identifier_new ("strcmp");
32408 _tmp364_ = _tmp363_;
32409 _tmp365_ = bala_ccode_base_module_generate_cmp_wrapper (self, _tmp364_);
32410 _tmp366_ = _tmp365_;
32411 _tmp367_ = bala_ccode_identifier_new (_tmp366_);
32412 _tmp368_ = _tmp367_;
32413 _tmp369_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp368_);
32414 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32415 ccall = _tmp369_;
32416 _bala_ccode_node_unref0 (_tmp368_)((_tmp368_ == ((void*)0)) ? ((void*)0) : (_tmp368_ = (bala_ccode_node_unref
(_tmp368_), ((void*)0))))
;
32417 _g_free0 (_tmp366_)(_tmp366_ = (g_free (_tmp366_), ((void*)0)));
32418 _bala_ccode_node_unref0 (_tmp364_)((_tmp364_ == ((void*)0)) ? ((void*)0) : (_tmp364_ = (bala_ccode_node_unref
(_tmp364_), ((void*)0))))
;
32419 } else {
32420 BalaCCodeIdentifier* _tmp370_;
32421 BalaCCodeIdentifier* _tmp371_;
32422 BalaCCodeFunctionCall* _tmp372_;
32423 _tmp370_ = bala_ccode_identifier_new ("g_strcmp0");
32424 _tmp371_ = _tmp370_;
32425 _tmp372_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp371_);
32426 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32427 ccall = _tmp372_;
32428 _bala_ccode_node_unref0 (_tmp371_)((_tmp371_ == ((void*)0)) ? ((void*)0) : (_tmp371_ = (bala_ccode_node_unref
(_tmp371_), ((void*)0))))
;
32429 }
32430 _tmp373_ = ccall;
32431 _tmp374_ = cleft;
32432 bala_ccode_function_call_add_argument (_tmp373_, _tmp374_);
32433 _tmp375_ = ccall;
32434 _tmp376_ = cright;
32435 bala_ccode_function_call_add_argument (_tmp375_, _tmp376_);
32436 _tmp377_ = ccall;
32437 _tmp378_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp377_);
32438 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
32439 cleft = _tmp378_;
32440 _tmp379_ = bala_ccode_constant_new ("0");
32441 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
32442 cright = (BalaCCodeExpression*) _tmp379_;
32443 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32444 break;
32445 }
32446 default:
32447 {
32448 break;
32449 }
32450 }
32451 }
32452 _tmp380_ = op;
32453 _tmp381_ = cleft;
32454 _tmp382_ = cright;
32455 _tmp383_ = bala_ccode_binary_expression_new (_tmp380_, _tmp381_, _tmp382_);
32456 _tmp384_ = _tmp383_;
32457 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp384_);
32458 _bala_ccode_node_unref0 (_tmp384_)((_tmp384_ == ((void*)0)) ? ((void*)0) : (_tmp384_ = (bala_ccode_node_unref
(_tmp384_), ((void*)0))))
;
32459 _tmp385_ = left_chain;
32460 if (_tmp385_ != NULL((void*)0)) {
32461 BalaCCodeExpression* _tmp386_;
32462 BalaCCodeExpression* _tmp387_;
32463 BalaCCodeBinaryExpression* _tmp388_;
32464 BalaCCodeBinaryExpression* _tmp389_;
32465 _tmp386_ = left_chain;
32466 _tmp387_ = bala_get_cvalue ((BalaExpression*) expr);
32467 _tmp388_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_AND, _tmp386_, _tmp387_);
32468 _tmp389_ = _tmp388_;
32469 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp389_);
32470 _bala_ccode_node_unref0 (_tmp389_)((_tmp389_ == ((void*)0)) ? ((void*)0) : (_tmp389_ = (bala_ccode_node_unref
(_tmp389_), ((void*)0))))
;
32471 }
32472 _bala_ccode_node_unref0 (left_chain)((left_chain == ((void*)0)) ? ((void*)0) : (left_chain = (bala_ccode_node_unref
(left_chain), ((void*)0))))
;
32473 _bala_ccode_node_unref0 (cright)((cright == ((void*)0)) ? ((void*)0) : (cright = (bala_ccode_node_unref
(cright), ((void*)0))))
;
32474 _bala_ccode_node_unref0 (cleft)((cleft == ((void*)0)) ? ((void*)0) : (cleft = (bala_ccode_node_unref
(cleft), ((void*)0))))
;
32475}
32476
32477BalaCCodeExpression*
32478bala_ccode_base_module_create_type_check (BalaCCodeBaseModule* self,
32479 BalaCCodeNode* ccodenode,
32480 BalaDataType* type)
32481{
32482 BalaErrorType* et = NULL((void*)0);
32483 BalaErrorType* _tmp0_;
32484 gboolean _tmp1_ = FALSE(0);
32485 BalaErrorType* _tmp2_;
32486 BalaCCodeExpression* result = NULL((void*)0);
32487 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
32488 g_return_val_if_fail (ccodenode != NULL, NULL)do { if ((ccodenode != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "ccodenode != NULL"
); return (((void*)0)); } } while (0)
;
32489 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
32490 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ERROR_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_error_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaErrorType*) type) : NULL((void*)0));
32491 et = _tmp0_;
32492 _tmp2_ = et;
32493 if (_tmp2_ != NULL((void*)0)) {
32494 BalaErrorType* _tmp3_;
32495 BalaErrorCode* _tmp4_;
32496 BalaErrorCode* _tmp5_;
32497 _tmp3_ = et;
32498 _tmp4_ = bala_error_type_get_error_code (_tmp3_);
32499 _tmp5_ = _tmp4_;
32500 _tmp1_ = _tmp5_ != NULL((void*)0);
32501 } else {
32502 _tmp1_ = FALSE(0);
32503 }
32504 if (_tmp1_) {
32505 BalaCCodeFunctionCall* matches_call = NULL((void*)0);
32506 BalaCCodeIdentifier* _tmp6_;
32507 BalaCCodeIdentifier* _tmp7_;
32508 BalaCCodeFunctionCall* _tmp8_;
32509 BalaCCodeFunctionCall* _tmp9_;
32510 BalaCCodeFunctionCall* _tmp10_;
32511 BalaCCodeFunctionCall* _tmp11_;
32512 BalaErrorType* _tmp12_;
32513 BalaErrorDomain* _tmp13_;
32514 BalaErrorDomain* _tmp14_;
32515 gchar* _tmp15_;
32516 gchar* _tmp16_;
32517 BalaCCodeIdentifier* _tmp17_;
32518 BalaCCodeIdentifier* _tmp18_;
32519 BalaCCodeFunctionCall* _tmp19_;
32520 BalaErrorType* _tmp20_;
32521 BalaErrorCode* _tmp21_;
32522 BalaErrorCode* _tmp22_;
32523 gchar* _tmp23_;
32524 gchar* _tmp24_;
32525 BalaCCodeIdentifier* _tmp25_;
32526 BalaCCodeIdentifier* _tmp26_;
32527 _tmp6_ = bala_ccode_identifier_new ("g_error_matches");
32528 _tmp7_ = _tmp6_;
32529 _tmp8_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp7_);
32530 _tmp9_ = _tmp8_;
32531 _bala_ccode_node_unref0 (_tmp7_)((_tmp7_ == ((void*)0)) ? ((void*)0) : (_tmp7_ = (bala_ccode_node_unref
(_tmp7_), ((void*)0))))
;
32532 matches_call = _tmp9_;
32533 _tmp10_ = matches_call;
32534 bala_ccode_function_call_add_argument (_tmp10_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (ccodenode), ((bala_ccode_expression_get_type ())))))
);
32535 _tmp11_ = matches_call;
32536 _tmp12_ = et;
32537 _tmp13_ = bala_error_type_get_error_domain (_tmp12_);
32538 _tmp14_ = _tmp13_;
32539 _tmp15_ = bala_get_ccode_upper_case_name ((BalaSymbol*) _tmp14_, NULL((void*)0));
32540 _tmp16_ = _tmp15_;
32541 _tmp17_ = bala_ccode_identifier_new (_tmp16_);
32542 _tmp18_ = _tmp17_;
32543 bala_ccode_function_call_add_argument (_tmp11_, (BalaCCodeExpression*) _tmp18_);
32544 _bala_ccode_node_unref0 (_tmp18_)((_tmp18_ == ((void*)0)) ? ((void*)0) : (_tmp18_ = (bala_ccode_node_unref
(_tmp18_), ((void*)0))))
;
32545 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
32546 _tmp19_ = matches_call;
32547 _tmp20_ = et;
32548 _tmp21_ = bala_error_type_get_error_code (_tmp20_);
32549 _tmp22_ = _tmp21_;
32550 _tmp23_ = bala_get_ccode_name ((BalaCodeNode*) _tmp22_);
32551 _tmp24_ = _tmp23_;
32552 _tmp25_ = bala_ccode_identifier_new (_tmp24_);
32553 _tmp26_ = _tmp25_;
32554 bala_ccode_function_call_add_argument (_tmp19_, (BalaCCodeExpression*) _tmp26_);
32555 _bala_ccode_node_unref0 (_tmp26_)((_tmp26_ == ((void*)0)) ? ((void*)0) : (_tmp26_ = (bala_ccode_node_unref
(_tmp26_), ((void*)0))))
;
32556 _g_free0 (_tmp24_)(_tmp24_ = (g_free (_tmp24_), ((void*)0)));
32557 result = (BalaCCodeExpression*) matches_call;
32558 _bala_code_node_unref0 (et)((et == ((void*)0)) ? ((void*)0) : (et = (bala_code_node_unref
(et), ((void*)0))))
;
32559 return result;
32560 } else {
32561 gboolean _tmp27_ = FALSE(0);
32562 BalaErrorType* _tmp28_;
32563 _tmp28_ = et;
32564 if (_tmp28_ != NULL((void*)0)) {
32565 BalaErrorType* _tmp29_;
32566 BalaErrorDomain* _tmp30_;
32567 BalaErrorDomain* _tmp31_;
32568 _tmp29_ = et;
32569 _tmp30_ = bala_error_type_get_error_domain (_tmp29_);
32570 _tmp31_ = _tmp30_;
32571 _tmp27_ = _tmp31_ != NULL((void*)0);
32572 } else {
32573 _tmp27_ = FALSE(0);
32574 }
32575 if (_tmp27_) {
32576 BalaCCodeMemberAccess* instance_domain = NULL((void*)0);
32577 BalaCCodeMemberAccess* _tmp32_;
32578 BalaCCodeIdentifier* type_domain = NULL((void*)0);
32579 BalaErrorType* _tmp33_;
32580 BalaErrorDomain* _tmp34_;
32581 BalaErrorDomain* _tmp35_;
32582 gchar* _tmp36_;
32583 gchar* _tmp37_;
32584 BalaCCodeIdentifier* _tmp38_;
32585 BalaCCodeIdentifier* _tmp39_;
32586 BalaCCodeMemberAccess* _tmp40_;
32587 BalaCCodeIdentifier* _tmp41_;
32588 BalaCCodeBinaryExpression* _tmp42_;
32589 _tmp32_ = bala_ccode_member_access_new_pointer (G_TYPE_CHECK_INSTANCE_CAST (ccodenode, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (ccodenode), ((bala_ccode_expression_get_type ())))))
, "domain");
32590 instance_domain = _tmp32_;
32591 _tmp33_ = et;
32592 _tmp34_ = bala_error_type_get_error_domain (_tmp33_);
32593 _tmp35_ = _tmp34_;
32594 _tmp36_ = bala_get_ccode_upper_case_name ((BalaSymbol*) _tmp35_, NULL((void*)0));
32595 _tmp37_ = _tmp36_;
32596 _tmp38_ = bala_ccode_identifier_new (_tmp37_);
32597 _tmp39_ = _tmp38_;
32598 _g_free0 (_tmp37_)(_tmp37_ = (g_free (_tmp37_), ((void*)0)));
32599 type_domain = _tmp39_;
32600 _tmp40_ = instance_domain;
32601 _tmp41_ = type_domain;
32602 _tmp42_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp40_, (BalaCCodeExpression*) _tmp41_);
32603 result = (BalaCCodeExpression*) _tmp42_;
32604 _bala_ccode_node_unref0 (type_domain)((type_domain == ((void*)0)) ? ((void*)0) : (type_domain = (bala_ccode_node_unref
(type_domain), ((void*)0))))
;
32605 _bala_ccode_node_unref0 (instance_domain)((instance_domain == ((void*)0)) ? ((void*)0) : (instance_domain
= (bala_ccode_node_unref (instance_domain), ((void*)0))))
;
32606 _bala_code_node_unref0 (et)((et == ((void*)0)) ? ((void*)0) : (et = (bala_code_node_unref
(et), ((void*)0))))
;
32607 return result;
32608 } else {
32609 BalaCCodeFunctionCall* ccheck = NULL((void*)0);
32610 gboolean _tmp43_ = FALSE(0);
32611 BalaTypeSymbol* _tmp44_;
32612 BalaTypeSymbol* _tmp45_;
32613 _tmp44_ = bala_data_type_get_type_symbol (type);
32614 _tmp45_ = _tmp44_;
32615 if (_tmp45_ == NULL((void*)0)) {
32616 _tmp43_ = TRUE(!(0));
32617 } else {
32618 BalaTypeSymbol* _tmp46_;
32619 BalaTypeSymbol* _tmp47_;
32620 gboolean _tmp48_;
32621 gboolean _tmp49_;
32622 _tmp46_ = bala_data_type_get_type_symbol (type);
32623 _tmp47_ = _tmp46_;
32624 _tmp48_ = bala_symbol_get_external_package ((BalaSymbol*) _tmp47_);
32625 _tmp49_ = _tmp48_;
32626 _tmp43_ = _tmp49_;
32627 }
32628 if (_tmp43_) {
32629 BalaCCodeExpression* type_id = NULL((void*)0);
32630 BalaCCodeExpression* _tmp50_;
32631 BalaCCodeExpression* _tmp51_;
32632 BalaCCodeIdentifier* _tmp53_;
32633 BalaCCodeIdentifier* _tmp54_;
32634 BalaCCodeFunctionCall* _tmp55_;
32635 BalaCCodeFunctionCall* _tmp56_;
32636 BalaCCodeFunctionCall* _tmp57_;
32637 BalaCCodeExpression* _tmp58_;
32638 _tmp50_ = bala_ccode_base_module_get_type_id_expression (self, type, FALSE(0));
32639 type_id = _tmp50_;
32640 _tmp51_ = type_id;
32641 if (_tmp51_ == NULL((void*)0)) {
32642 BalaCCodeInvalidExpression* _tmp52_;
32643 _tmp52_ = bala_ccode_invalid_expression_new ();
32644 result = (BalaCCodeExpression*) _tmp52_;
32645 _bala_ccode_node_unref0 (type_id)((type_id == ((void*)0)) ? ((void*)0) : (type_id = (bala_ccode_node_unref
(type_id), ((void*)0))))
;
32646 _bala_ccode_node_unref0 (ccheck)((ccheck == ((void*)0)) ? ((void*)0) : (ccheck = (bala_ccode_node_unref
(ccheck), ((void*)0))))
;
32647 _bala_code_node_unref0 (et)((et == ((void*)0)) ? ((void*)0) : (et = (bala_code_node_unref
(et), ((void*)0))))
;
32648 return result;
32649 }
32650 _tmp53_ = bala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_TYPE");
32651 _tmp54_ = _tmp53_;
32652 _tmp55_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp54_);
32653 _bala_ccode_node_unref0 (ccheck)((ccheck == ((void*)0)) ? ((void*)0) : (ccheck = (bala_ccode_node_unref
(ccheck), ((void*)0))))
;
32654 ccheck = _tmp55_;
32655 _bala_ccode_node_unref0 (_tmp54_)((_tmp54_ == ((void*)0)) ? ((void*)0) : (_tmp54_ = (bala_ccode_node_unref
(_tmp54_), ((void*)0))))
;
32656 _tmp56_ = ccheck;
32657 bala_ccode_function_call_add_argument (_tmp56_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (ccodenode), ((bala_ccode_expression_get_type ())))))
);
32658 _tmp57_ = ccheck;
32659 _tmp58_ = type_id;
32660 bala_ccode_function_call_add_argument (_tmp57_, _tmp58_);
32661 _bala_ccode_node_unref0 (type_id)((type_id == ((void*)0)) ? ((void*)0) : (type_id = (bala_ccode_node_unref
(type_id), ((void*)0))))
;
32662 } else {
32663 BalaTypeSymbol* _tmp59_;
32664 BalaTypeSymbol* _tmp60_;
32665 gchar* _tmp61_;
32666 gchar* _tmp62_;
32667 BalaCCodeIdentifier* _tmp63_;
32668 BalaCCodeIdentifier* _tmp64_;
32669 BalaCCodeFunctionCall* _tmp65_;
32670 BalaCCodeFunctionCall* _tmp66_;
32671 _tmp59_ = bala_data_type_get_type_symbol (type);
32672 _tmp60_ = _tmp59_;
32673 _tmp61_ = bala_get_ccode_type_check_function (_tmp60_);
32674 _tmp62_ = _tmp61_;
32675 _tmp63_ = bala_ccode_identifier_new (_tmp62_);
32676 _tmp64_ = _tmp63_;
32677 _tmp65_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp64_);
32678 _bala_ccode_node_unref0 (ccheck)((ccheck == ((void*)0)) ? ((void*)0) : (ccheck = (bala_ccode_node_unref
(ccheck), ((void*)0))))
;
32679 ccheck = _tmp65_;
32680 _bala_ccode_node_unref0 (_tmp64_)((_tmp64_ == ((void*)0)) ? ((void*)0) : (_tmp64_ = (bala_ccode_node_unref
(_tmp64_), ((void*)0))))
;
32681 _g_free0 (_tmp62_)(_tmp62_ = (g_free (_tmp62_), ((void*)0)));
32682 _tmp66_ = ccheck;
32683 bala_ccode_function_call_add_argument (_tmp66_, G_TYPE_CHECK_INSTANCE_CAST (ccodenode, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (ccodenode), ((bala_ccode_expression_get_type ())))))
);
32684 }
32685 result = (BalaCCodeExpression*) ccheck;
32686 _bala_code_node_unref0 (et)((et == ((void*)0)) ? ((void*)0) : (et = (bala_code_node_unref
(et), ((void*)0))))
;
32687 return result;
32688 }
32689 }
32690 _bala_code_node_unref0 (et)((et == ((void*)0)) ? ((void*)0) : (et = (bala_code_node_unref
(et), ((void*)0))))
;
32691}
32692
32693static gchar*
32694bala_ccode_base_module_generate_array_contains_wrapper (BalaCCodeBaseModule* self,
32695 BalaArrayType* array_type)
32696{
32697 gchar* array_contains_func = NULL((void*)0);
32698 BalaDataType* _tmp0_;
32699 BalaDataType* _tmp1_;
32700 gchar* _tmp2_;
32701 gchar* _tmp3_;
32702 gchar* _tmp4_;
32703 gchar* _tmp5_;
32704 const gchar* _tmp6_;
32705 BalaCCodeFunction* function = NULL((void*)0);
32706 const gchar* _tmp7_;
32707 BalaDataType* _tmp8_;
32708 gchar* _tmp9_;
32709 gchar* _tmp10_;
32710 BalaCCodeFunction* _tmp11_;
32711 BalaCCodeFunction* _tmp12_;
32712 BalaCCodeFunction* _tmp13_;
32713 BalaCCodeFunction* _tmp14_;
32714 BalaDataType* _tmp15_;
32715 BalaDataType* _tmp16_;
32716 gchar* _tmp17_;
32717 gchar* _tmp18_;
32718 gchar* _tmp19_;
32719 gchar* _tmp20_;
32720 BalaCCodeParameter* _tmp21_;
32721 BalaCCodeParameter* _tmp22_;
32722 BalaCCodeFunction* _tmp23_;
32723 BalaDataType* _tmp24_;
32724 gchar* _tmp25_;
32725 gchar* _tmp26_;
32726 BalaCCodeParameter* _tmp27_;
32727 BalaCCodeParameter* _tmp28_;
32728 BalaDataType* _tmp29_;
32729 BalaDataType* _tmp30_;
32730 BalaCCodeFunction* _tmp49_;
32731 BalaCCodeFunction* _tmp50_;
32732 BalaCCodeFunction* _tmp51_;
32733 BalaDataType* _tmp52_;
32734 gchar* _tmp53_;
32735 gchar* _tmp54_;
32736 BalaCCodeVariableDeclarator* _tmp55_;
32737 BalaCCodeVariableDeclarator* _tmp56_;
32738 BalaCCodeAssignment* cloop_initializer = NULL((void*)0);
32739 BalaCCodeIdentifier* _tmp57_;
32740 BalaCCodeIdentifier* _tmp58_;
32741 BalaCCodeConstant* _tmp59_;
32742 BalaCCodeConstant* _tmp60_;
32743 BalaCCodeAssignment* _tmp61_;
32744 BalaCCodeAssignment* _tmp62_;
32745 BalaCCodeBinaryExpression* cloop_condition = NULL((void*)0);
32746 BalaCCodeIdentifier* _tmp63_;
32747 BalaCCodeIdentifier* _tmp64_;
32748 BalaCCodeIdentifier* _tmp65_;
32749 BalaCCodeIdentifier* _tmp66_;
32750 BalaCCodeBinaryExpression* _tmp67_;
32751 BalaCCodeBinaryExpression* _tmp68_;
32752 BalaCCodeUnaryExpression* cloop_iterator = NULL((void*)0);
32753 BalaCCodeIdentifier* _tmp69_;
32754 BalaCCodeIdentifier* _tmp70_;
32755 BalaCCodeUnaryExpression* _tmp71_;
32756 BalaCCodeUnaryExpression* _tmp72_;
32757 BalaCCodeFunction* _tmp73_;
32758 BalaCCodeFunction* _tmp74_;
32759 BalaCCodeAssignment* _tmp75_;
32760 BalaCCodeBinaryExpression* _tmp76_;
32761 BalaCCodeUnaryExpression* _tmp77_;
32762 BalaCCodeElementAccess* celement = NULL((void*)0);
32763 BalaCCodeIdentifier* _tmp78_;
32764 BalaCCodeIdentifier* _tmp79_;
32765 BalaCCodeIdentifier* _tmp80_;
32766 BalaCCodeIdentifier* _tmp81_;
32767 BalaCCodeElementAccess* _tmp82_;
32768 BalaCCodeElementAccess* _tmp83_;
32769 BalaCCodeIdentifier* cneedle = NULL((void*)0);
32770 BalaCCodeIdentifier* _tmp84_;
32771 BalaCCodeBinaryExpression* cif_condition = NULL((void*)0);
32772 BalaDataType* _tmp85_;
32773 BalaDataType* _tmp86_;
32774 BalaDataType* _tmp87_;
32775 BalaCCodeFunction* _tmp135_;
32776 BalaCCodeFunction* _tmp136_;
32777 BalaCCodeBinaryExpression* _tmp137_;
32778 BalaCCodeFunction* _tmp138_;
32779 BalaCCodeFunction* _tmp139_;
32780 BalaCCodeExpression* _tmp140_;
32781 BalaCCodeExpression* _tmp141_;
32782 BalaCCodeFunction* _tmp142_;
32783 BalaCCodeFunction* _tmp143_;
32784 BalaCCodeFunction* _tmp144_;
32785 BalaCCodeFunction* _tmp145_;
32786 BalaCCodeFunction* _tmp146_;
32787 BalaCCodeFunction* _tmp147_;
32788 BalaCCodeExpression* _tmp148_;
32789 BalaCCodeExpression* _tmp149_;
32790 BalaCCodeFile* _tmp150_;
32791 BalaCCodeFunction* _tmp151_;
32792 BalaCCodeFile* _tmp152_;
32793 BalaCCodeFunction* _tmp153_;
32794 gchar* result = NULL((void*)0);
32795 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
32796 g_return_val_if_fail (array_type != NULL, NULL)do { if ((array_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "array_type != NULL"
); return (((void*)0)); } } while (0)
;
32797 _tmp0_ = bala_array_type_get_element_type (array_type);
32798 _tmp1_ = _tmp0_;
32799 _tmp2_ = bala_get_ccode_lower_case_name ((BalaCodeNode*) _tmp1_, NULL((void*)0));
32800 _tmp3_ = _tmp2_;
32801 _tmp4_ = g_strdup_printf ("_bala_%s_array_contains", _tmp3_);
32802 _tmp5_ = _tmp4_;
32803 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
32804 array_contains_func = _tmp5_;
32805 _tmp6_ = array_contains_func;
32806 if (!bala_ccode_base_module_add_wrapper (self, _tmp6_)) {
32807 result = array_contains_func;
32808 return result;
32809 }
32810 _tmp7_ = array_contains_func;
32811 _tmp8_ = self->bool_type;
32812 _tmp9_ = bala_get_ccode_name ((BalaCodeNode*) _tmp8_);
32813 _tmp10_ = _tmp9_;
32814 _tmp11_ = bala_ccode_function_new (_tmp7_, _tmp10_);
32815 _tmp12_ = _tmp11_;
32816 _g_free0 (_tmp10_)(_tmp10_ = (g_free (_tmp10_), ((void*)0)));
32817 function = _tmp12_;
32818 _tmp13_ = function;
32819 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp13_, BALA_CCODE_MODIFIERS_STATIC);
32820 _tmp14_ = function;
32821 _tmp15_ = bala_array_type_get_element_type (array_type);
32822 _tmp16_ = _tmp15_;
32823 _tmp17_ = bala_get_ccode_name ((BalaCodeNode*) _tmp16_);
32824 _tmp18_ = _tmp17_;
32825 _tmp19_ = g_strdup_printf ("%s *", _tmp18_);
32826 _tmp20_ = _tmp19_;
32827 _tmp21_ = bala_ccode_parameter_new ("stack", _tmp20_);
32828 _tmp22_ = _tmp21_;
32829 bala_ccode_function_add_parameter (_tmp14_, _tmp22_);
32830 _bala_ccode_node_unref0 (_tmp22_)((_tmp22_ == ((void*)0)) ? ((void*)0) : (_tmp22_ = (bala_ccode_node_unref
(_tmp22_), ((void*)0))))
;
32831 _g_free0 (_tmp20_)(_tmp20_ = (g_free (_tmp20_), ((void*)0)));
32832 _g_free0 (_tmp18_)(_tmp18_ = (g_free (_tmp18_), ((void*)0)));
32833 _tmp23_ = function;
32834 _tmp24_ = self->int_type;
32835 _tmp25_ = bala_get_ccode_name ((BalaCodeNode*) _tmp24_);
32836 _tmp26_ = _tmp25_;
32837 _tmp27_ = bala_ccode_parameter_new ("stack_length", _tmp26_);
32838 _tmp28_ = _tmp27_;
32839 bala_ccode_function_add_parameter (_tmp23_, _tmp28_);
32840 _bala_ccode_node_unref0 (_tmp28_)((_tmp28_ == ((void*)0)) ? ((void*)0) : (_tmp28_ = (bala_ccode_node_unref
(_tmp28_), ((void*)0))))
;
32841 _g_free0 (_tmp26_)(_tmp26_ = (g_free (_tmp26_), ((void*)0)));
32842 _tmp29_ = bala_array_type_get_element_type (array_type);
32843 _tmp30_ = _tmp29_;
32844 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp30_); GType __t = ((bala_struct_value_type_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
32845 BalaCCodeFunction* _tmp31_;
32846 BalaDataType* _tmp32_;
32847 BalaDataType* _tmp33_;
32848 gchar* _tmp34_;
32849 gchar* _tmp35_;
32850 gchar* _tmp36_;
32851 gchar* _tmp37_;
32852 BalaCCodeParameter* _tmp38_;
32853 BalaCCodeParameter* _tmp39_;
32854 _tmp31_ = function;
32855 _tmp32_ = bala_array_type_get_element_type (array_type);
32856 _tmp33_ = _tmp32_;
32857 _tmp34_ = bala_get_ccode_name ((BalaCodeNode*) _tmp33_);
32858 _tmp35_ = _tmp34_;
32859 _tmp36_ = g_strdup_printf ("const %s *", _tmp35_);
32860 _tmp37_ = _tmp36_;
32861 _tmp38_ = bala_ccode_parameter_new ("needle", _tmp37_);
32862 _tmp39_ = _tmp38_;
32863 bala_ccode_function_add_parameter (_tmp31_, _tmp39_);
32864 _bala_ccode_node_unref0 (_tmp39_)((_tmp39_ == ((void*)0)) ? ((void*)0) : (_tmp39_ = (bala_ccode_node_unref
(_tmp39_), ((void*)0))))
;
32865 _g_free0 (_tmp37_)(_tmp37_ = (g_free (_tmp37_), ((void*)0)));
32866 _g_free0 (_tmp35_)(_tmp35_ = (g_free (_tmp35_), ((void*)0)));
32867 } else {
32868 BalaCCodeFunction* _tmp40_;
32869 BalaDataType* _tmp41_;
32870 BalaDataType* _tmp42_;
32871 gchar* _tmp43_;
32872 gchar* _tmp44_;
32873 gchar* _tmp45_;
32874 gchar* _tmp46_;
32875 BalaCCodeParameter* _tmp47_;
32876 BalaCCodeParameter* _tmp48_;
32877 _tmp40_ = function;
32878 _tmp41_ = bala_array_type_get_element_type (array_type);
32879 _tmp42_ = _tmp41_;
32880 _tmp43_ = bala_get_ccode_name ((BalaCodeNode*) _tmp42_);
32881 _tmp44_ = _tmp43_;
32882 _tmp45_ = g_strdup_printf ("const %s", _tmp44_);
32883 _tmp46_ = _tmp45_;
32884 _tmp47_ = bala_ccode_parameter_new ("needle", _tmp46_);
32885 _tmp48_ = _tmp47_;
32886 bala_ccode_function_add_parameter (_tmp40_, _tmp48_);
32887 _bala_ccode_node_unref0 (_tmp48_)((_tmp48_ == ((void*)0)) ? ((void*)0) : (_tmp48_ = (bala_ccode_node_unref
(_tmp48_), ((void*)0))))
;
32888 _g_free0 (_tmp46_)(_tmp46_ = (g_free (_tmp46_), ((void*)0)));
32889 _g_free0 (_tmp44_)(_tmp44_ = (g_free (_tmp44_), ((void*)0)));
32890 }
32891 _tmp49_ = function;
32892 bala_ccode_base_module_push_function (self, _tmp49_);
32893 _tmp50_ = bala_ccode_base_module_get_ccode (self);
32894 _tmp51_ = _tmp50_;
32895 _tmp52_ = self->int_type;
32896 _tmp53_ = bala_get_ccode_name ((BalaCodeNode*) _tmp52_);
32897 _tmp54_ = _tmp53_;
32898 _tmp55_ = bala_ccode_variable_declarator_new ("i", NULL((void*)0), NULL((void*)0));
32899 _tmp56_ = _tmp55_;
32900 bala_ccode_function_add_declaration (_tmp51_, _tmp54_, (BalaCCodeDeclarator*) _tmp56_, 0);
32901 _bala_ccode_node_unref0 (_tmp56_)((_tmp56_ == ((void*)0)) ? ((void*)0) : (_tmp56_ = (bala_ccode_node_unref
(_tmp56_), ((void*)0))))
;
32902 _g_free0 (_tmp54_)(_tmp54_ = (g_free (_tmp54_), ((void*)0)));
32903 _tmp57_ = bala_ccode_identifier_new ("i");
32904 _tmp58_ = _tmp57_;
32905 _tmp59_ = bala_ccode_constant_new ("0");
32906 _tmp60_ = _tmp59_;
32907 _tmp61_ = bala_ccode_assignment_new ((BalaCCodeExpression*) _tmp58_, (BalaCCodeExpression*) _tmp60_, BALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
32908 _tmp62_ = _tmp61_;
32909 _bala_ccode_node_unref0 (_tmp60_)((_tmp60_ == ((void*)0)) ? ((void*)0) : (_tmp60_ = (bala_ccode_node_unref
(_tmp60_), ((void*)0))))
;
32910 _bala_ccode_node_unref0 (_tmp58_)((_tmp58_ == ((void*)0)) ? ((void*)0) : (_tmp58_ = (bala_ccode_node_unref
(_tmp58_), ((void*)0))))
;
32911 cloop_initializer = _tmp62_;
32912 _tmp63_ = bala_ccode_identifier_new ("i");
32913 _tmp64_ = _tmp63_;
32914 _tmp65_ = bala_ccode_identifier_new ("stack_length");
32915 _tmp66_ = _tmp65_;
32916 _tmp67_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_LESS_THAN, (BalaCCodeExpression*) _tmp64_, (BalaCCodeExpression*) _tmp66_);
32917 _tmp68_ = _tmp67_;
32918 _bala_ccode_node_unref0 (_tmp66_)((_tmp66_ == ((void*)0)) ? ((void*)0) : (_tmp66_ = (bala_ccode_node_unref
(_tmp66_), ((void*)0))))
;
32919 _bala_ccode_node_unref0 (_tmp64_)((_tmp64_ == ((void*)0)) ? ((void*)0) : (_tmp64_ = (bala_ccode_node_unref
(_tmp64_), ((void*)0))))
;
32920 cloop_condition = _tmp68_;
32921 _tmp69_ = bala_ccode_identifier_new ("i");
32922 _tmp70_ = _tmp69_;
32923 _tmp71_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POSTFIX_INCREMENT, (BalaCCodeExpression*) _tmp70_);
32924 _tmp72_ = _tmp71_;
32925 _bala_ccode_node_unref0 (_tmp70_)((_tmp70_ == ((void*)0)) ? ((void*)0) : (_tmp70_ = (bala_ccode_node_unref
(_tmp70_), ((void*)0))))
;
32926 cloop_iterator = _tmp72_;
32927 _tmp73_ = bala_ccode_base_module_get_ccode (self);
32928 _tmp74_ = _tmp73_;
32929 _tmp75_ = cloop_initializer;
32930 _tmp76_ = cloop_condition;
32931 _tmp77_ = cloop_iterator;
32932 bala_ccode_function_open_for (_tmp74_, (BalaCCodeExpression*) _tmp75_, (BalaCCodeExpression*) _tmp76_, (BalaCCodeExpression*) _tmp77_);
32933 _tmp78_ = bala_ccode_identifier_new ("stack");
32934 _tmp79_ = _tmp78_;
32935 _tmp80_ = bala_ccode_identifier_new ("i");
32936 _tmp81_ = _tmp80_;
32937 _tmp82_ = bala_ccode_element_access_new ((BalaCCodeExpression*) _tmp79_, (BalaCCodeExpression*) _tmp81_);
32938 _tmp83_ = _tmp82_;
32939 _bala_ccode_node_unref0 (_tmp81_)((_tmp81_ == ((void*)0)) ? ((void*)0) : (_tmp81_ = (bala_ccode_node_unref
(_tmp81_), ((void*)0))))
;
32940 _bala_ccode_node_unref0 (_tmp79_)((_tmp79_ == ((void*)0)) ? ((void*)0) : (_tmp79_ = (bala_ccode_node_unref
(_tmp79_), ((void*)0))))
;
32941 celement = _tmp83_;
32942 _tmp84_ = bala_ccode_identifier_new ("needle");
32943 cneedle = _tmp84_;
32944 _tmp85_ = bala_array_type_get_element_type (array_type);
32945 _tmp86_ = _tmp85_;
32946 _tmp87_ = self->string_type;
32947 if (bala_data_type_compatible (_tmp86_, _tmp87_)) {
32948 BalaCCodeFunctionCall* ccall = NULL((void*)0);
32949 BalaCodeContext* _tmp88_;
32950 BalaProfile _tmp89_;
32951 BalaProfile _tmp90_;
32952 BalaCCodeFunctionCall* _tmp102_;
32953 BalaCCodeElementAccess* _tmp103_;
32954 BalaCCodeFunctionCall* _tmp104_;
32955 BalaCCodeIdentifier* _tmp105_;
32956 BalaCCodeFunctionCall* _tmp106_;
32957 BalaCCodeConstant* _tmp107_;
32958 BalaCCodeConstant* _tmp108_;
32959 BalaCCodeBinaryExpression* _tmp109_;
32960 _tmp88_ = self->priv->_context;
32961 _tmp89_ = bala_code_context_get_profile (_tmp88_);
32962 _tmp90_ = _tmp89_;
32963 if (_tmp90_ == BALA_PROFILE_POSIX) {
32964 BalaCCodeFile* _tmp91_;
32965 BalaCCodeIdentifier* _tmp92_;
32966 BalaCCodeIdentifier* _tmp93_;
32967 gchar* _tmp94_;
32968 gchar* _tmp95_;
32969 BalaCCodeIdentifier* _tmp96_;
32970 BalaCCodeIdentifier* _tmp97_;
32971 BalaCCodeFunctionCall* _tmp98_;
32972 _tmp91_ = self->cfile;
32973 bala_ccode_file_add_include (_tmp91_, "string.h", FALSE(0));
32974 _tmp92_ = bala_ccode_identifier_new ("strcmp");
32975 _tmp93_ = _tmp92_;
32976 _tmp94_ = bala_ccode_base_module_generate_cmp_wrapper (self, _tmp93_);
32977 _tmp95_ = _tmp94_;
32978 _tmp96_ = bala_ccode_identifier_new (_tmp95_);
32979 _tmp97_ = _tmp96_;
32980 _tmp98_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp97_);
32981 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32982 ccall = _tmp98_;
32983 _bala_ccode_node_unref0 (_tmp97_)((_tmp97_ == ((void*)0)) ? ((void*)0) : (_tmp97_ = (bala_ccode_node_unref
(_tmp97_), ((void*)0))))
;
32984 _g_free0 (_tmp95_)(_tmp95_ = (g_free (_tmp95_), ((void*)0)));
32985 _bala_ccode_node_unref0 (_tmp93_)((_tmp93_ == ((void*)0)) ? ((void*)0) : (_tmp93_ = (bala_ccode_node_unref
(_tmp93_), ((void*)0))))
;
32986 } else {
32987 BalaCCodeIdentifier* _tmp99_;
32988 BalaCCodeIdentifier* _tmp100_;
32989 BalaCCodeFunctionCall* _tmp101_;
32990 _tmp99_ = bala_ccode_identifier_new ("g_strcmp0");
32991 _tmp100_ = _tmp99_;
32992 _tmp101_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp100_);
32993 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
32994 ccall = _tmp101_;
32995 _bala_ccode_node_unref0 (_tmp100_)((_tmp100_ == ((void*)0)) ? ((void*)0) : (_tmp100_ = (bala_ccode_node_unref
(_tmp100_), ((void*)0))))
;
32996 }
32997 _tmp102_ = ccall;
32998 _tmp103_ = celement;
32999 bala_ccode_function_call_add_argument (_tmp102_, (BalaCCodeExpression*) _tmp103_);
33000 _tmp104_ = ccall;
33001 _tmp105_ = cneedle;
33002 bala_ccode_function_call_add_argument (_tmp104_, (BalaCCodeExpression*) _tmp105_);
33003 _tmp106_ = ccall;
33004 _tmp107_ = bala_ccode_constant_new ("0");
33005 _tmp108_ = _tmp107_;
33006 _tmp109_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp106_, (BalaCCodeExpression*) _tmp108_);
33007 _bala_ccode_node_unref0 (cif_condition)((cif_condition == ((void*)0)) ? ((void*)0) : (cif_condition =
(bala_ccode_node_unref (cif_condition), ((void*)0))))
;
33008 cif_condition = _tmp109_;
33009 _bala_ccode_node_unref0 (_tmp108_)((_tmp108_ == ((void*)0)) ? ((void*)0) : (_tmp108_ = (bala_ccode_node_unref
(_tmp108_), ((void*)0))))
;
33010 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
33011 } else {
33012 BalaDataType* _tmp110_;
33013 BalaDataType* _tmp111_;
33014 _tmp110_ = bala_array_type_get_element_type (array_type);
33015 _tmp111_ = _tmp110_;
33016 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp111_, BALA_TYPE_STRUCT_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp111_); GType __t = ((bala_struct_value_type_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
33017 gchar* equalfunc = NULL((void*)0);
33018 BalaDataType* _tmp112_;
33019 BalaDataType* _tmp113_;
33020 BalaTypeSymbol* _tmp114_;
33021 BalaTypeSymbol* _tmp115_;
33022 gchar* _tmp116_;
33023 BalaCCodeFunctionCall* ccall = NULL((void*)0);
33024 const gchar* _tmp117_;
33025 BalaCCodeIdentifier* _tmp118_;
33026 BalaCCodeIdentifier* _tmp119_;
33027 BalaCCodeFunctionCall* _tmp120_;
33028 BalaCCodeFunctionCall* _tmp121_;
33029 BalaCCodeFunctionCall* _tmp122_;
33030 BalaCCodeElementAccess* _tmp123_;
33031 BalaCCodeUnaryExpression* _tmp124_;
33032 BalaCCodeUnaryExpression* _tmp125_;
33033 BalaCCodeFunctionCall* _tmp126_;
33034 BalaCCodeIdentifier* _tmp127_;
33035 BalaCCodeFunctionCall* _tmp128_;
33036 BalaCCodeExpression* _tmp129_;
33037 BalaCCodeExpression* _tmp130_;
33038 BalaCCodeBinaryExpression* _tmp131_;
33039 _tmp112_ = bala_array_type_get_element_type (array_type);
33040 _tmp113_ = _tmp112_;
33041 _tmp114_ = bala_data_type_get_type_symbol (_tmp113_);
33042 _tmp115_ = _tmp114_;
33043 _tmp116_ = bala_ccode_base_module_generate_struct_equal_function (self, G_TYPE_CHECK_INSTANCE_CAST (_tmp115_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp115_), ((bala_struct_get_type ())))))
);
33044 equalfunc = _tmp116_;
33045 _tmp117_ = equalfunc;
33046 _tmp118_ = bala_ccode_identifier_new (_tmp117_);
33047 _tmp119_ = _tmp118_;
33048 _tmp120_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp119_);
33049 _tmp121_ = _tmp120_;
33050 _bala_ccode_node_unref0 (_tmp119_)((_tmp119_ == ((void*)0)) ? ((void*)0) : (_tmp119_ = (bala_ccode_node_unref
(_tmp119_), ((void*)0))))
;
33051 ccall = _tmp121_;
33052 _tmp122_ = ccall;
33053 _tmp123_ = celement;
33054 _tmp124_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, (BalaCCodeExpression*) _tmp123_);
33055 _tmp125_ = _tmp124_;
33056 bala_ccode_function_call_add_argument (_tmp122_, (BalaCCodeExpression*) _tmp125_);
33057 _bala_ccode_node_unref0 (_tmp125_)((_tmp125_ == ((void*)0)) ? ((void*)0) : (_tmp125_ = (bala_ccode_node_unref
(_tmp125_), ((void*)0))))
;
33058 _tmp126_ = ccall;
33059 _tmp127_ = cneedle;
33060 bala_ccode_function_call_add_argument (_tmp126_, (BalaCCodeExpression*) _tmp127_);
33061 _tmp128_ = ccall;
33062 _tmp129_ = bala_ccode_base_module_get_boolean_cconstant (self, TRUE(!(0)));
33063 _tmp130_ = _tmp129_;
33064 _tmp131_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp128_, _tmp130_);
33065 _bala_ccode_node_unref0 (cif_condition)((cif_condition == ((void*)0)) ? ((void*)0) : (cif_condition =
(bala_ccode_node_unref (cif_condition), ((void*)0))))
;
33066 cif_condition = _tmp131_;
33067 _bala_ccode_node_unref0 (_tmp130_)((_tmp130_ == ((void*)0)) ? ((void*)0) : (_tmp130_ = (bala_ccode_node_unref
(_tmp130_), ((void*)0))))
;
33068 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
33069 _g_free0 (equalfunc)(equalfunc = (g_free (equalfunc), ((void*)0)));
33070 } else {
33071 BalaCCodeIdentifier* _tmp132_;
33072 BalaCCodeElementAccess* _tmp133_;
33073 BalaCCodeBinaryExpression* _tmp134_;
33074 _tmp132_ = cneedle;
33075 _tmp133_ = celement;
33076 _tmp134_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_EQUALITY, (BalaCCodeExpression*) _tmp132_, (BalaCCodeExpression*) _tmp133_);
33077 _bala_ccode_node_unref0 (cif_condition)((cif_condition == ((void*)0)) ? ((void*)0) : (cif_condition =
(bala_ccode_node_unref (cif_condition), ((void*)0))))
;
33078 cif_condition = _tmp134_;
33079 }
33080 }
33081 _tmp135_ = bala_ccode_base_module_get_ccode (self);
33082 _tmp136_ = _tmp135_;
33083 _tmp137_ = cif_condition;
33084 bala_ccode_function_open_if (_tmp136_, (BalaCCodeExpression*) _tmp137_);
33085 _tmp138_ = bala_ccode_base_module_get_ccode (self);
33086 _tmp139_ = _tmp138_;
33087 _tmp140_ = bala_ccode_base_module_get_boolean_cconstant (self, TRUE(!(0)));
33088 _tmp141_ = _tmp140_;
33089 bala_ccode_function_add_return (_tmp139_, _tmp141_);
33090 _bala_ccode_node_unref0 (_tmp141_)((_tmp141_ == ((void*)0)) ? ((void*)0) : (_tmp141_ = (bala_ccode_node_unref
(_tmp141_), ((void*)0))))
;
33091 _tmp142_ = bala_ccode_base_module_get_ccode (self);
33092 _tmp143_ = _tmp142_;
33093 bala_ccode_function_close (_tmp143_);
33094 _tmp144_ = bala_ccode_base_module_get_ccode (self);
33095 _tmp145_ = _tmp144_;
33096 bala_ccode_function_close (_tmp145_);
33097 _tmp146_ = bala_ccode_base_module_get_ccode (self);
33098 _tmp147_ = _tmp146_;
33099 _tmp148_ = bala_ccode_base_module_get_boolean_cconstant (self, FALSE(0));
33100 _tmp149_ = _tmp148_;
33101 bala_ccode_function_add_return (_tmp147_, _tmp149_);
33102 _bala_ccode_node_unref0 (_tmp149_)((_tmp149_ == ((void*)0)) ? ((void*)0) : (_tmp149_ = (bala_ccode_node_unref
(_tmp149_), ((void*)0))))
;
33103 bala_ccode_base_module_pop_function (self);
33104 _tmp150_ = self->cfile;
33105 _tmp151_ = function;
33106 bala_ccode_file_add_function_declaration (_tmp150_, _tmp151_);
33107 _tmp152_ = self->cfile;
33108 _tmp153_ = function;
33109 bala_ccode_file_add_function (_tmp152_, _tmp153_);
33110 result = array_contains_func;
33111 _bala_ccode_node_unref0 (cif_condition)((cif_condition == ((void*)0)) ? ((void*)0) : (cif_condition =
(bala_ccode_node_unref (cif_condition), ((void*)0))))
;
33112 _bala_ccode_node_unref0 (cneedle)((cneedle == ((void*)0)) ? ((void*)0) : (cneedle = (bala_ccode_node_unref
(cneedle), ((void*)0))))
;
33113 _bala_ccode_node_unref0 (celement)((celement == ((void*)0)) ? ((void*)0) : (celement = (bala_ccode_node_unref
(celement), ((void*)0))))
;
33114 _bala_ccode_node_unref0 (cloop_iterator)((cloop_iterator == ((void*)0)) ? ((void*)0) : (cloop_iterator
= (bala_ccode_node_unref (cloop_iterator), ((void*)0))))
;
33115 _bala_ccode_node_unref0 (cloop_condition)((cloop_condition == ((void*)0)) ? ((void*)0) : (cloop_condition
= (bala_ccode_node_unref (cloop_condition), ((void*)0))))
;
33116 _bala_ccode_node_unref0 (cloop_initializer)((cloop_initializer == ((void*)0)) ? ((void*)0) : (cloop_initializer
= (bala_ccode_node_unref (cloop_initializer), ((void*)0))))
;
33117 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
33118 return result;
33119}
33120
33121static gchar*
33122bala_ccode_base_module_generate_cmp_wrapper (BalaCCodeBaseModule* self,
33123 BalaCCodeIdentifier* cmpid)
33124{
33125 gchar* cmp0_func = NULL((void*)0);
33126 const gchar* _tmp0_;
33127 const gchar* _tmp1_;
33128 gchar* _tmp2_;
33129 const gchar* _tmp3_;
33130 const gchar* _tmp4_;
33131 gchar* result = NULL((void*)0);
33132 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
33133 g_return_val_if_fail (cmpid != NULL, NULL)do { if ((cmpid != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cmpid != NULL"
); return (((void*)0)); } } while (0)
;
33134 _tmp0_ = bala_ccode_identifier_get_name (cmpid);
33135 _tmp1_ = _tmp0_;
33136 _tmp2_ = g_strdup_printf ("_%s0", _tmp1_);
33137 cmp0_func = _tmp2_;
33138 _tmp3_ = bala_ccode_identifier_get_name (cmpid);
33139 _tmp4_ = _tmp3_;
33140 if (g_strcmp0 (_tmp4_, "g_strcmp0") == 0) {
33141 const gchar* _tmp5_;
33142 const gchar* _tmp6_;
33143 gchar* _tmp7_;
33144 _tmp5_ = bala_ccode_identifier_get_name (cmpid);
33145 _tmp6_ = _tmp5_;
33146 _tmp7_ = g_strdup (_tmp6_);
33147 _g_free0 (cmp0_func)(cmp0_func = (g_free (cmp0_func), ((void*)0)));
33148 cmp0_func = _tmp7_;
33149 } else {
33150 const gchar* _tmp8_;
33151 _tmp8_ = cmp0_func;
33152 if (bala_ccode_base_module_add_wrapper (self, _tmp8_)) {
33153 BalaCCodeFunction* cmp0_fun = NULL((void*)0);
33154 const gchar* _tmp9_;
33155 BalaDataType* _tmp10_;
33156 gchar* _tmp11_;
33157 gchar* _tmp12_;
33158 BalaCCodeFunction* _tmp13_;
33159 BalaCCodeFunction* _tmp14_;
33160 BalaCCodeFunction* _tmp15_;
33161 BalaCCodeParameter* _tmp16_;
33162 BalaCCodeParameter* _tmp17_;
33163 BalaCCodeFunction* _tmp18_;
33164 BalaCCodeParameter* _tmp19_;
33165 BalaCCodeParameter* _tmp20_;
33166 BalaCCodeFunction* _tmp21_;
33167 BalaCCodeFunction* _tmp22_;
33168 BalaCCodeBinaryExpression* noteq = NULL((void*)0);
33169 BalaCCodeIdentifier* _tmp23_;
33170 BalaCCodeIdentifier* _tmp24_;
33171 BalaCCodeIdentifier* _tmp25_;
33172 BalaCCodeIdentifier* _tmp26_;
33173 BalaCCodeBinaryExpression* _tmp27_;
33174 BalaCCodeBinaryExpression* _tmp28_;
33175 BalaCCodeFunctionCall* cmp_call = NULL((void*)0);
33176 BalaCCodeFunctionCall* _tmp55_;
33177 BalaCCodeFunctionCall* _tmp56_;
33178 BalaCCodeIdentifier* _tmp57_;
33179 BalaCCodeIdentifier* _tmp58_;
33180 BalaCCodeFunctionCall* _tmp59_;
33181 BalaCCodeIdentifier* _tmp60_;
33182 BalaCCodeIdentifier* _tmp61_;
33183 BalaCCodeFunction* _tmp62_;
33184 BalaCCodeFunction* _tmp63_;
33185 BalaCCodeFunctionCall* _tmp64_;
33186 BalaCCodeFile* _tmp65_;
33187 BalaCCodeFunction* _tmp66_;
33188 _tmp9_ = cmp0_func;
33189 _tmp10_ = self->int_type;
33190 _tmp11_ = bala_get_ccode_name ((BalaCodeNode*) _tmp10_);
33191 _tmp12_ = _tmp11_;
33192 _tmp13_ = bala_ccode_function_new (_tmp9_, _tmp12_);
33193 _tmp14_ = _tmp13_;
33194 _g_free0 (_tmp12_)(_tmp12_ = (g_free (_tmp12_), ((void*)0)));
33195 cmp0_fun = _tmp14_;
33196 _tmp15_ = cmp0_fun;
33197 _tmp16_ = bala_ccode_parameter_new ("s1", "const void *");
33198 _tmp17_ = _tmp16_;
33199 bala_ccode_function_add_parameter (_tmp15_, _tmp17_);
33200 _bala_ccode_node_unref0 (_tmp17_)((_tmp17_ == ((void*)0)) ? ((void*)0) : (_tmp17_ = (bala_ccode_node_unref
(_tmp17_), ((void*)0))))
;
33201 _tmp18_ = cmp0_fun;
33202 _tmp19_ = bala_ccode_parameter_new ("s2", "const void *");
33203 _tmp20_ = _tmp19_;
33204 bala_ccode_function_add_parameter (_tmp18_, _tmp20_);
33205 _bala_ccode_node_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_node_unref
(_tmp20_), ((void*)0))))
;
33206 _tmp21_ = cmp0_fun;
33207 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp21_, BALA_CCODE_MODIFIERS_STATIC);
33208 _tmp22_ = cmp0_fun;
33209 bala_ccode_base_module_push_function (self, _tmp22_);
33210 _tmp23_ = bala_ccode_identifier_new ("s1");
33211 _tmp24_ = _tmp23_;
33212 _tmp25_ = bala_ccode_identifier_new ("s2");
33213 _tmp26_ = _tmp25_;
33214 _tmp27_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, (BalaCCodeExpression*) _tmp24_, (BalaCCodeExpression*) _tmp26_);
33215 _tmp28_ = _tmp27_;
33216 _bala_ccode_node_unref0 (_tmp26_)((_tmp26_ == ((void*)0)) ? ((void*)0) : (_tmp26_ = (bala_ccode_node_unref
(_tmp26_), ((void*)0))))
;
33217 _bala_ccode_node_unref0 (_tmp24_)((_tmp24_ == ((void*)0)) ? ((void*)0) : (_tmp24_ = (bala_ccode_node_unref
(_tmp24_), ((void*)0))))
;
33218 noteq = _tmp28_;
33219 {
33220 BalaCCodeUnaryExpression* cexp = NULL((void*)0);
33221 BalaCCodeIdentifier* _tmp29_;
33222 BalaCCodeIdentifier* _tmp30_;
33223 BalaCCodeUnaryExpression* _tmp31_;
33224 BalaCCodeUnaryExpression* _tmp32_;
33225 BalaCCodeFunction* _tmp33_;
33226 BalaCCodeFunction* _tmp34_;
33227 BalaCCodeUnaryExpression* _tmp35_;
33228 BalaCCodeFunction* _tmp36_;
33229 BalaCCodeFunction* _tmp37_;
33230 BalaCCodeBinaryExpression* _tmp38_;
33231 BalaCCodeUnaryExpression* _tmp39_;
33232 BalaCCodeUnaryExpression* _tmp40_;
33233 BalaCCodeFunction* _tmp41_;
33234 BalaCCodeFunction* _tmp42_;
33235 _tmp29_ = bala_ccode_identifier_new ("s1");
33236 _tmp30_ = _tmp29_;
33237 _tmp31_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (BalaCCodeExpression*) _tmp30_);
33238 _tmp32_ = _tmp31_;
33239 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
33240 cexp = _tmp32_;
33241 _tmp33_ = bala_ccode_base_module_get_ccode (self);
33242 _tmp34_ = _tmp33_;
33243 _tmp35_ = cexp;
33244 bala_ccode_function_open_if (_tmp34_, (BalaCCodeExpression*) _tmp35_);
33245 _tmp36_ = bala_ccode_base_module_get_ccode (self);
33246 _tmp37_ = _tmp36_;
33247 _tmp38_ = noteq;
33248 _tmp39_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_MINUS, (BalaCCodeExpression*) _tmp38_);
33249 _tmp40_ = _tmp39_;
33250 bala_ccode_function_add_return (_tmp37_, (BalaCCodeExpression*) _tmp40_);
33251 _bala_ccode_node_unref0 (_tmp40_)((_tmp40_ == ((void*)0)) ? ((void*)0) : (_tmp40_ = (bala_ccode_node_unref
(_tmp40_), ((void*)0))))
;
33252 _tmp41_ = bala_ccode_base_module_get_ccode (self);
33253 _tmp42_ = _tmp41_;
33254 bala_ccode_function_close (_tmp42_);
33255 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
33256 }
33257 {
33258 BalaCCodeUnaryExpression* cexp = NULL((void*)0);
33259 BalaCCodeIdentifier* _tmp43_;
33260 BalaCCodeIdentifier* _tmp44_;
33261 BalaCCodeUnaryExpression* _tmp45_;
33262 BalaCCodeUnaryExpression* _tmp46_;
33263 BalaCCodeFunction* _tmp47_;
33264 BalaCCodeFunction* _tmp48_;
33265 BalaCCodeUnaryExpression* _tmp49_;
33266 BalaCCodeFunction* _tmp50_;
33267 BalaCCodeFunction* _tmp51_;
33268 BalaCCodeBinaryExpression* _tmp52_;
33269 BalaCCodeFunction* _tmp53_;
33270 BalaCCodeFunction* _tmp54_;
33271 _tmp43_ = bala_ccode_identifier_new ("s2");
33272 _tmp44_ = _tmp43_;
33273 _tmp45_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_LOGICAL_NEGATION, (BalaCCodeExpression*) _tmp44_);
33274 _tmp46_ = _tmp45_;
33275 _bala_ccode_node_unref0 (_tmp44_)((_tmp44_ == ((void*)0)) ? ((void*)0) : (_tmp44_ = (bala_ccode_node_unref
(_tmp44_), ((void*)0))))
;
33276 cexp = _tmp46_;
33277 _tmp47_ = bala_ccode_base_module_get_ccode (self);
33278 _tmp48_ = _tmp47_;
33279 _tmp49_ = cexp;
33280 bala_ccode_function_open_if (_tmp48_, (BalaCCodeExpression*) _tmp49_);
33281 _tmp50_ = bala_ccode_base_module_get_ccode (self);
33282 _tmp51_ = _tmp50_;
33283 _tmp52_ = noteq;
33284 bala_ccode_function_add_return (_tmp51_, (BalaCCodeExpression*) _tmp52_);
33285 _tmp53_ = bala_ccode_base_module_get_ccode (self);
33286 _tmp54_ = _tmp53_;
33287 bala_ccode_function_close (_tmp54_);
33288 _bala_ccode_node_unref0 (cexp)((cexp == ((void*)0)) ? ((void*)0) : (cexp = (bala_ccode_node_unref
(cexp), ((void*)0))))
;
33289 }
33290 _tmp55_ = bala_ccode_function_call_new ((BalaCCodeExpression*) cmpid);
33291 cmp_call = _tmp55_;
33292 _tmp56_ = cmp_call;
33293 _tmp57_ = bala_ccode_identifier_new ("s1");
33294 _tmp58_ = _tmp57_;
33295 bala_ccode_function_call_add_argument (_tmp56_, (BalaCCodeExpression*) _tmp58_);
33296 _bala_ccode_node_unref0 (_tmp58_)((_tmp58_ == ((void*)0)) ? ((void*)0) : (_tmp58_ = (bala_ccode_node_unref
(_tmp58_), ((void*)0))))
;
33297 _tmp59_ = cmp_call;
33298 _tmp60_ = bala_ccode_identifier_new ("s2");
33299 _tmp61_ = _tmp60_;
33300 bala_ccode_function_call_add_argument (_tmp59_, (BalaCCodeExpression*) _tmp61_);
33301 _bala_ccode_node_unref0 (_tmp61_)((_tmp61_ == ((void*)0)) ? ((void*)0) : (_tmp61_ = (bala_ccode_node_unref
(_tmp61_), ((void*)0))))
;
33302 _tmp62_ = bala_ccode_base_module_get_ccode (self);
33303 _tmp63_ = _tmp62_;
33304 _tmp64_ = cmp_call;
33305 bala_ccode_function_add_return (_tmp63_, (BalaCCodeExpression*) _tmp64_);
33306 bala_ccode_base_module_pop_function (self);
33307 _tmp65_ = self->cfile;
33308 _tmp66_ = cmp0_fun;
33309 bala_ccode_file_add_function (_tmp65_, _tmp66_);
33310 _bala_ccode_node_unref0 (cmp_call)((cmp_call == ((void*)0)) ? ((void*)0) : (cmp_call = (bala_ccode_node_unref
(cmp_call), ((void*)0))))
;
33311 _bala_ccode_node_unref0 (noteq)((noteq == ((void*)0)) ? ((void*)0) : (noteq = (bala_ccode_node_unref
(noteq), ((void*)0))))
;
33312 _bala_ccode_node_unref0 (cmp0_fun)((cmp0_fun == ((void*)0)) ? ((void*)0) : (cmp0_fun = (bala_ccode_node_unref
(cmp0_fun), ((void*)0))))
;
33313 }
33314 }
33315 result = cmp0_func;
33316 return result;
33317}
33318
33319static void
33320bala_ccode_base_module_real_visit_type_check (BalaCodeVisitor* base,
33321 BalaTypeCheck* expr)
33322{
33323 BalaCCodeBaseModule * self;
33324 BalaDataType* _tmp0_;
33325 BalaDataType* _tmp1_;
33326 BalaCCodeFile* _tmp2_;
33327 BalaDataType* type = NULL((void*)0);
33328 BalaExpression* _tmp3_;
33329 BalaExpression* _tmp4_;
33330 BalaDataType* _tmp5_;
33331 BalaDataType* _tmp6_;
33332 BalaDataType* _tmp7_;
33333 BalaPointerType* pointer_type = NULL((void*)0);
33334 BalaDataType* _tmp8_;
33335 BalaPointerType* _tmp9_;
33336 BalaPointerType* _tmp10_;
33337 BalaClass* cl = NULL((void*)0);
33338 BalaDataType* _tmp15_;
33339 BalaTypeSymbol* _tmp16_;
33340 BalaTypeSymbol* _tmp17_;
33341 BalaInterface* iface = NULL((void*)0);
33342 BalaDataType* _tmp18_;
33343 BalaTypeSymbol* _tmp19_;
33344 BalaTypeSymbol* _tmp20_;
33345 gboolean _tmp21_ = FALSE(0);
33346 gboolean _tmp22_ = FALSE(0);
33347 gboolean _tmp23_ = FALSE(0);
33348 gboolean _tmp24_ = FALSE(0);
33349 BalaClass* _tmp25_;
33350 BalaCCodeExpression* _tmp41_;
33351 self = (BalaCCodeBaseModule*) base;
33352 g_return_if_fail (expr != NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return; } } while (0)
;
33353 _tmp0_ = bala_typecheck_get_type_reference (expr);
33354 _tmp1_ = _tmp0_;
33355 _tmp2_ = self->cfile;
33356 bala_ccode_base_module_generate_type_declaration (self, _tmp1_, _tmp2_);
33357 _tmp3_ = bala_typecheck_get_expression (expr);
33358 _tmp4_ = _tmp3_;
33359 _tmp5_ = bala_expression_get_value_type (_tmp4_);
33360 _tmp6_ = _tmp5_;
33361 _tmp7_ = _bala_code_node_ref0 (_tmp6_);
33362 type = _tmp7_;
33363 _tmp8_ = type;
33364 _tmp9_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp8_, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp8_); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaPointerType*) _tmp8_) : NULL((void*)0));
33365 pointer_type = _tmp9_;
33366 _tmp10_ = pointer_type;
33367 if (_tmp10_ != NULL((void*)0)) {
33368 BalaPointerType* _tmp11_;
33369 BalaDataType* _tmp12_;
33370 BalaDataType* _tmp13_;
33371 BalaDataType* _tmp14_;
33372 _tmp11_ = pointer_type;
33373 _tmp12_ = bala_pointer_type_get_base_type (_tmp11_);
33374 _tmp13_ = _tmp12_;
33375 _tmp14_ = _bala_code_node_ref0 (_tmp13_);
33376 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
33377 type = _tmp14_;
33378 }
33379 _tmp15_ = type;
33380 _tmp16_ = bala_data_type_get_type_symbol (_tmp15_);
33381 _tmp17_ = _tmp16_;
33382 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp17_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp17_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp17_) : NULL((void*)0);
33383 _tmp18_ = type;
33384 _tmp19_ = bala_data_type_get_type_symbol (_tmp18_);
33385 _tmp20_ = _tmp19_;
33386 iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp20_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp20_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaInterface*) _tmp20_) : NULL((void*)0);
33387 _tmp25_ = cl;
33388 if (_tmp25_ != NULL((void*)0)) {
33389 BalaClass* _tmp26_;
33390 gboolean _tmp27_;
33391 gboolean _tmp28_;
33392 _tmp26_ = cl;
33393 _tmp27_ = bala_class_get_is_compact (_tmp26_);
33394 _tmp28_ = _tmp27_;
33395 _tmp24_ = !_tmp28_;
33396 } else {
33397 _tmp24_ = FALSE(0);
33398 }
33399 if (_tmp24_) {
33400 _tmp23_ = TRUE(!(0));
33401 } else {
33402 BalaInterface* _tmp29_;
33403 _tmp29_ = iface;
33404 _tmp23_ = _tmp29_ != NULL((void*)0);
33405 }
33406 if (_tmp23_) {
33407 _tmp22_ = TRUE(!(0));
33408 } else {
33409 BalaDataType* _tmp30_;
33410 _tmp30_ = type;
33411 _tmp22_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp30_, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp30_); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
33412 }
33413 if (_tmp22_) {
33414 _tmp21_ = TRUE(!(0));
33415 } else {
33416 BalaDataType* _tmp31_;
33417 _tmp31_ = type;
33418 _tmp21_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp31_, BALA_TYPE_ERROR_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp31_); GType __t = ((bala_error_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
33419 }
33420 if (_tmp21_) {
33421 BalaExpression* _tmp32_;
33422 BalaExpression* _tmp33_;
33423 BalaCCodeExpression* _tmp34_;
33424 BalaDataType* _tmp35_;
33425 BalaDataType* _tmp36_;
33426 BalaCCodeExpression* _tmp37_;
33427 BalaCCodeExpression* _tmp38_;
33428 _tmp32_ = bala_typecheck_get_expression (expr);
33429 _tmp33_ = _tmp32_;
33430 _tmp34_ = bala_get_cvalue (_tmp33_);
33431 _tmp35_ = bala_typecheck_get_type_reference (expr);
33432 _tmp36_ = _tmp35_;
33433 _tmp37_ = bala_ccode_base_module_create_type_check (self, (BalaCCodeNode*) _tmp34_, _tmp36_);
33434 _tmp38_ = _tmp37_;
33435 bala_set_cvalue ((BalaExpression*) expr, _tmp38_);
33436 _bala_ccode_node_unref0 (_tmp38_)((_tmp38_ == ((void*)0)) ? ((void*)0) : (_tmp38_ = (bala_ccode_node_unref
(_tmp38_), ((void*)0))))
;
33437 } else {
33438 BalaCCodeInvalidExpression* _tmp39_;
33439 BalaCCodeInvalidExpression* _tmp40_;
33440 _tmp39_ = bala_ccode_invalid_expression_new ();
33441 _tmp40_ = _tmp39_;
33442 bala_set_cvalue ((BalaExpression*) expr, (BalaCCodeExpression*) _tmp40_);
33443 _bala_ccode_node_unref0 (_tmp40_)((_tmp40_ == ((void*)0)) ? ((void*)0) : (_tmp40_ = (bala_ccode_node_unref
(_tmp40_), ((void*)0))))
;
33444 }
33445 _tmp41_ = bala_get_cvalue ((BalaExpression*) expr);
33446 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp41_, BALA_TYPE_CCODE_INVALID_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp41_); GType __t = ((bala_ccode_invalid_expression_get_type
())); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
33447 BalaSourceReference* _tmp42_;
33448 BalaSourceReference* _tmp43_;
33449 _tmp42_ = bala_code_node_get_source_reference ((BalaCodeNode*) expr);
33450 _tmp43_ = _tmp42_;
33451 bala_report_error (_tmp43_, "type check expressions not supported for compact classes, structs, and" \
33452" enums");
33453 }
33454 _bala_code_node_unref0 (pointer_type)((pointer_type == ((void*)0)) ? ((void*)0) : (pointer_type = (
bala_code_node_unref (pointer_type), ((void*)0))))
;
33455 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
33456}
33457
33458static void
33459bala_ccode_base_module_real_visit_lambda_expression (BalaCodeVisitor* base,
33460 BalaLambdaExpression* lambda)
33461{
33462 BalaCCodeBaseModule * self;
33463 BalaDelegateType* delegate_type = NULL((void*)0);
33464 BalaDataType* _tmp0_;
33465 BalaDataType* _tmp1_;
33466 BalaDelegateType* _tmp2_;
33467 gboolean expr_owned = FALSE(0);
33468 BalaDataType* _tmp3_;
33469 BalaDataType* _tmp4_;
33470 gboolean _tmp5_;
33471 gboolean _tmp6_;
33472 BalaMethod* _tmp7_;
33473 BalaMethod* _tmp8_;
33474 gchar* _tmp9_;
33475 gchar* _tmp10_;
33476 BalaCCodeIdentifier* _tmp11_;
33477 BalaCCodeIdentifier* _tmp12_;
33478 BalaDataType* this_type = NULL((void*)0);
33479 BalaMethod* _tmp13_;
33480 BalaMethod* _tmp14_;
33481 gboolean _tmp15_;
33482 gboolean _tmp16_;
33483 self = (BalaCCodeBaseModule*) base;
33484 g_return_if_fail (lambda != NULL)do { if ((lambda != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "lambda != NULL"
); return; } } while (0)
;
33485 _tmp0_ = bala_expression_get_target_type ((BalaExpression*) lambda);
33486 _tmp1_ = _tmp0_;
33487 _tmp2_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp1_), ((bala_delegate_type_get_type ())))))
);
33488 delegate_type = _tmp2_;
33489 bala_code_node_accept_children ((BalaCodeNode*) lambda, (BalaCodeVisitor*) self);
33490 _tmp3_ = bala_expression_get_value_type ((BalaExpression*) lambda);
33491 _tmp4_ = _tmp3_;
33492 _tmp5_ = bala_data_type_get_value_owned (_tmp4_);
33493 _tmp6_ = _tmp5_;
33494 expr_owned = _tmp6_;
33495 _tmp7_ = bala_lambda_expression_get_method (lambda);
33496 _tmp8_ = _tmp7_;
33497 _tmp9_ = bala_get_ccode_name ((BalaCodeNode*) _tmp8_);
33498 _tmp10_ = _tmp9_;
33499 _tmp11_ = bala_ccode_identifier_new (_tmp10_);
33500 _tmp12_ = _tmp11_;
33501 bala_set_cvalue ((BalaExpression*) lambda, (BalaCCodeExpression*) _tmp12_);
33502 _bala_ccode_node_unref0 (_tmp12_)((_tmp12_ == ((void*)0)) ? ((void*)0) : (_tmp12_ = (bala_ccode_node_unref
(_tmp12_), ((void*)0))))
;
33503 _g_free0 (_tmp10_)(_tmp10_ = (g_free (_tmp10_), ((void*)0)));
33504 _tmp13_ = bala_lambda_expression_get_method (lambda);
33505 _tmp14_ = _tmp13_;
33506 _tmp15_ = bala_method_get_closure (_tmp14_);
33507 _tmp16_ = _tmp15_;
33508 if (_tmp16_) {
33509 gint block_id = 0;
33510 BalaBlock* _tmp17_;
33511 BalaBlock* _tmp18_;
33512 BalaCCodeExpression* delegate_target = NULL((void*)0);
33513 gchar* _tmp19_;
33514 gchar* _tmp20_;
33515 BalaCCodeExpression* _tmp21_;
33516 BalaCCodeExpression* _tmp22_;
33517 gboolean _tmp23_ = FALSE(0);
33518 BalaCCodeExpression* _tmp43_;
33519 _tmp17_ = bala_ccode_base_module_get_current_closure_block (self);
33520 _tmp18_ = _tmp17_;
33521 block_id = bala_ccode_base_module_get_block_id (self, _tmp18_);
33522 _tmp19_ = g_strdup_printf ("_data%d_", block_id);
33523 _tmp20_ = _tmp19_;
33524 _tmp21_ = bala_ccode_base_module_get_variable_cexpression (self, _tmp20_);
33525 _tmp22_ = _tmp21_;
33526 _g_free0 (_tmp20_)(_tmp20_ = (g_free (_tmp20_), ((void*)0)));
33527 delegate_target = _tmp22_;
33528 if (expr_owned) {
33529 _tmp23_ = TRUE(!(0));
33530 } else {
33531 BalaDelegateType* _tmp24_;
33532 gboolean _tmp25_;
33533 gboolean _tmp26_;
33534 _tmp24_ = delegate_type;
33535 _tmp25_ = bala_delegate_type_get_is_called_once (_tmp24_);
33536 _tmp26_ = _tmp25_;
33537 _tmp23_ = _tmp26_;
33538 }
33539 if (_tmp23_) {
33540 BalaCCodeFunctionCall* ref_call = NULL((void*)0);
33541 gchar* _tmp27_;
33542 gchar* _tmp28_;
33543 BalaCCodeIdentifier* _tmp29_;
33544 BalaCCodeIdentifier* _tmp30_;
33545 BalaCCodeFunctionCall* _tmp31_;
33546 BalaCCodeFunctionCall* _tmp32_;
33547 BalaCCodeFunctionCall* _tmp33_;
33548 BalaCCodeExpression* _tmp34_;
33549 BalaCCodeFunctionCall* _tmp35_;
33550 BalaCCodeExpression* _tmp36_;
33551 gchar* _tmp37_;
33552 gchar* _tmp38_;
33553 BalaCCodeIdentifier* _tmp39_;
33554 BalaCCodeIdentifier* _tmp40_;
33555 _tmp27_ = g_strdup_printf ("block%d_data_ref", block_id);
33556 _tmp28_ = _tmp27_;
33557 _tmp29_ = bala_ccode_identifier_new (_tmp28_);
33558 _tmp30_ = _tmp29_;
33559 _tmp31_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp30_);
33560 _tmp32_ = _tmp31_;
33561 _bala_ccode_node_unref0 (_tmp30_)((_tmp30_ == ((void*)0)) ? ((void*)0) : (_tmp30_ = (bala_ccode_node_unref
(_tmp30_), ((void*)0))))
;
33562 _g_free0 (_tmp28_)(_tmp28_ = (g_free (_tmp28_), ((void*)0)));
33563 ref_call = _tmp32_;
33564 _tmp33_ = ref_call;
33565 _tmp34_ = delegate_target;
33566 bala_ccode_function_call_add_argument (_tmp33_, _tmp34_);
33567 _tmp35_ = ref_call;
33568 _tmp36_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp35_);
33569 _bala_ccode_node_unref0 (delegate_target)((delegate_target == ((void*)0)) ? ((void*)0) : (delegate_target
= (bala_ccode_node_unref (delegate_target), ((void*)0))))
;
33570 delegate_target = _tmp36_;
33571 _tmp37_ = g_strdup_printf ("block%d_data_unref", block_id);
33572 _tmp38_ = _tmp37_;
33573 _tmp39_ = bala_ccode_identifier_new (_tmp38_);
33574 _tmp40_ = _tmp39_;
33575 bala_set_delegate_target_destroy_notify ((BalaExpression*) lambda, (BalaCCodeExpression*) _tmp40_);
33576 _bala_ccode_node_unref0 (_tmp40_)((_tmp40_ == ((void*)0)) ? ((void*)0) : (_tmp40_ = (bala_ccode_node_unref
(_tmp40_), ((void*)0))))
;
33577 _g_free0 (_tmp38_)(_tmp38_ = (g_free (_tmp38_), ((void*)0)));
33578 _bala_ccode_node_unref0 (ref_call)((ref_call == ((void*)0)) ? ((void*)0) : (ref_call = (bala_ccode_node_unref
(ref_call), ((void*)0))))
;
33579 } else {
33580 BalaCCodeConstant* _tmp41_;
33581 BalaCCodeConstant* _tmp42_;
33582 _tmp41_ = bala_ccode_constant_new ("NULL");
33583 _tmp42_ = _tmp41_;
33584 bala_set_delegate_target_destroy_notify ((BalaExpression*) lambda, (BalaCCodeExpression*) _tmp42_);
33585 _bala_ccode_node_unref0 (_tmp42_)((_tmp42_ == ((void*)0)) ? ((void*)0) : (_tmp42_ = (bala_ccode_node_unref
(_tmp42_), ((void*)0))))
;
33586 }
33587 _tmp43_ = delegate_target;
33588 bala_set_delegate_target ((BalaExpression*) lambda, _tmp43_);
33589 _bala_ccode_node_unref0 (delegate_target)((delegate_target == ((void*)0)) ? ((void*)0) : (delegate_target
= (bala_ccode_node_unref (delegate_target), ((void*)0))))
;
33590 } else {
33591 BalaDataType* _tmp44_;
33592 BalaDataType* _tmp45_;
33593 _tmp44_ = bala_ccode_base_module_get_this_type (self);
33594 this_type = _tmp44_;
33595 _tmp45_ = this_type;
33596 if (_tmp45_ != NULL((void*)0)) {
33597 BalaCCodeExpression* delegate_target = NULL((void*)0);
33598 BalaCCodeExpression* _tmp46_;
33599 BalaCCodeExpression* _tmp47_;
33600 BalaDataType* _tmp48_;
33601 BalaCCodeExpression* _tmp49_;
33602 gboolean _tmp50_ = FALSE(0);
33603 BalaCCodeExpression* _tmp70_;
33604 _tmp46_ = bala_ccode_base_module_get_this_cexpression (self);
33605 delegate_target = _tmp46_;
33606 _tmp47_ = delegate_target;
33607 _tmp48_ = this_type;
33608 _tmp49_ = bala_ccode_base_module_convert_to_generic_pointer (self, _tmp47_, _tmp48_);
33609 _bala_ccode_node_unref0 (delegate_target)((delegate_target == ((void*)0)) ? ((void*)0) : (delegate_target
= (bala_ccode_node_unref (delegate_target), ((void*)0))))
;
33610 delegate_target = _tmp49_;
33611 if (expr_owned) {
33612 _tmp50_ = TRUE(!(0));
33613 } else {
33614 BalaDelegateType* _tmp51_;
33615 gboolean _tmp52_;
33616 gboolean _tmp53_;
33617 _tmp51_ = delegate_type;
33618 _tmp52_ = bala_delegate_type_get_is_called_once (_tmp51_);
33619 _tmp53_ = _tmp52_;
33620 _tmp50_ = _tmp53_;
33621 }
33622 if (_tmp50_) {
33623 BalaCCodeFunctionCall* ref_call = NULL((void*)0);
33624 BalaDataType* _tmp54_;
33625 BalaSourceReference* _tmp55_;
33626 BalaSourceReference* _tmp56_;
33627 BalaCCodeExpression* _tmp57_;
33628 BalaCCodeExpression* _tmp58_;
33629 BalaCCodeFunctionCall* _tmp59_;
33630 BalaCCodeFunctionCall* _tmp60_;
33631 BalaCCodeFunctionCall* _tmp61_;
33632 BalaCCodeExpression* _tmp62_;
33633 BalaCCodeFunctionCall* _tmp63_;
33634 BalaCCodeExpression* _tmp64_;
33635 BalaDataType* _tmp65_;
33636 BalaCCodeExpression* _tmp66_;
33637 BalaCCodeExpression* _tmp67_;
33638 _tmp54_ = this_type;
33639 _tmp55_ = bala_code_node_get_source_reference ((BalaCodeNode*) lambda);
33640 _tmp56_ = _tmp55_;
33641 _tmp57_ = bala_ccode_base_module_get_dup_func_expression (self, _tmp54_, _tmp56_, FALSE(0));
33642 _tmp58_ = _tmp57_;
33643 _tmp59_ = bala_ccode_function_call_new (_tmp58_);
33644 _tmp60_ = _tmp59_;
33645 _bala_ccode_node_unref0 (_tmp58_)((_tmp58_ == ((void*)0)) ? ((void*)0) : (_tmp58_ = (bala_ccode_node_unref
(_tmp58_), ((void*)0))))
;
33646 ref_call = _tmp60_;
33647 _tmp61_ = ref_call;
33648 _tmp62_ = delegate_target;
33649 bala_ccode_function_call_add_argument (_tmp61_, _tmp62_);
33650 _tmp63_ = ref_call;
33651 _tmp64_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp63_);
33652 _bala_ccode_node_unref0 (delegate_target)((delegate_target == ((void*)0)) ? ((void*)0) : (delegate_target
= (bala_ccode_node_unref (delegate_target), ((void*)0))))
;
33653 delegate_target = _tmp64_;
33654 _tmp65_ = this_type;
33655 _tmp66_ = bala_ccode_base_module_get_destroy_func_expression (self, _tmp65_, FALSE(0));
33656 _tmp67_ = _tmp66_;
33657 bala_set_delegate_target_destroy_notify ((BalaExpression*) lambda, _tmp67_);
33658 _bala_ccode_node_unref0 (_tmp67_)((_tmp67_ == ((void*)0)) ? ((void*)0) : (_tmp67_ = (bala_ccode_node_unref
(_tmp67_), ((void*)0))))
;
33659 _bala_ccode_node_unref0 (ref_call)((ref_call == ((void*)0)) ? ((void*)0) : (ref_call = (bala_ccode_node_unref
(ref_call), ((void*)0))))
;
33660 } else {
33661 BalaCCodeConstant* _tmp68_;
33662 BalaCCodeConstant* _tmp69_;
33663 _tmp68_ = bala_ccode_constant_new ("NULL");
33664 _tmp69_ = _tmp68_;
33665 bala_set_delegate_target_destroy_notify ((BalaExpression*) lambda, (BalaCCodeExpression*) _tmp69_);
33666 _bala_ccode_node_unref0 (_tmp69_)((_tmp69_ == ((void*)0)) ? ((void*)0) : (_tmp69_ = (bala_ccode_node_unref
(_tmp69_), ((void*)0))))
;
33667 }
33668 _tmp70_ = delegate_target;
33669 bala_set_delegate_target ((BalaExpression*) lambda, _tmp70_);
33670 _bala_ccode_node_unref0 (delegate_target)((delegate_target == ((void*)0)) ? ((void*)0) : (delegate_target
= (bala_ccode_node_unref (delegate_target), ((void*)0))))
;
33671 } else {
33672 BalaCCodeConstant* _tmp71_;
33673 BalaCCodeConstant* _tmp72_;
33674 BalaCCodeConstant* _tmp73_;
33675 BalaCCodeConstant* _tmp74_;
33676 _tmp71_ = bala_ccode_constant_new ("NULL");
33677 _tmp72_ = _tmp71_;
33678 bala_set_delegate_target ((BalaExpression*) lambda, (BalaCCodeExpression*) _tmp72_);
33679 _bala_ccode_node_unref0 (_tmp72_)((_tmp72_ == ((void*)0)) ? ((void*)0) : (_tmp72_ = (bala_ccode_node_unref
(_tmp72_), ((void*)0))))
;
33680 _tmp73_ = bala_ccode_constant_new ("NULL");
33681 _tmp74_ = _tmp73_;
33682 bala_set_delegate_target_destroy_notify ((BalaExpression*) lambda, (BalaCCodeExpression*) _tmp74_);
33683 _bala_ccode_node_unref0 (_tmp74_)((_tmp74_ == ((void*)0)) ? ((void*)0) : (_tmp74_ = (bala_ccode_node_unref
(_tmp74_), ((void*)0))))
;
33684 }
33685 }
33686 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
33687}
33688
33689BalaCCodeExpression*
33690bala_ccode_base_module_convert_from_generic_pointer (BalaCCodeBaseModule* self,
33691 BalaCCodeExpression* cexpr,
33692 BalaDataType* actual_type)
33693{
33694 BalaSemanticAnalyzer* analyzer = NULL((void*)0);
33695 BalaCodeContext* _tmp0_;
33696 BalaSemanticAnalyzer* _tmp1_;
33697 BalaSemanticAnalyzer* _tmp2_;
33698 BalaCCodeExpression* _result_ = NULL((void*)0);
33699 BalaCCodeExpression* _tmp3_;
33700 gboolean _tmp4_ = FALSE(0);
33701 BalaSemanticAnalyzer* _tmp5_;
33702 BalaCCodeExpression* result = NULL((void*)0);
33703 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
33704 g_return_val_if_fail (cexpr != NULL, NULL)do { if ((cexpr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cexpr != NULL"
); return (((void*)0)); } } while (0)
;
33705 g_return_val_if_fail (actual_type != NULL, NULL)do { if ((actual_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "actual_type != NULL"
); return (((void*)0)); } } while (0)
;
33706 _tmp0_ = self->priv->_context;
33707 _tmp1_ = bala_code_context_get_analyzer (_tmp0_);
33708 _tmp2_ = _tmp1_;
33709 analyzer = _tmp2_;
33710 _tmp3_ = _bala_ccode_node_ref0 (cexpr);
33711 _result_ = _tmp3_;
33712 _tmp5_ = analyzer;
33713 if (bala_semantic_analyzer_is_reference_type_argument (_tmp5_, actual_type)) {
33714 _tmp4_ = TRUE(!(0));
33715 } else {
33716 BalaSemanticAnalyzer* _tmp6_;
33717 _tmp6_ = analyzer;
33718 _tmp4_ = bala_semantic_analyzer_is_nullable_value_type_argument (_tmp6_, actual_type);
33719 }
33720 if (_tmp4_) {
33721 BalaCCodeFile* _tmp7_;
33722 gchar* _tmp8_;
33723 gchar* _tmp9_;
33724 BalaCCodeCastExpression* _tmp10_;
33725 _tmp7_ = self->cfile;
33726 bala_ccode_base_module_generate_type_declaration (self, actual_type, _tmp7_);
33727 _tmp8_ = bala_get_ccode_name ((BalaCodeNode*) actual_type);
33728 _tmp9_ = _tmp8_;
33729 _tmp10_ = bala_ccode_cast_expression_new (cexpr, _tmp9_);
33730 _bala_ccode_node_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_ccode_node_unref
(_result_), ((void*)0))))
;
33731 _result_ = (BalaCCodeExpression*) _tmp10_;
33732 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
33733 } else {
33734 BalaSemanticAnalyzer* _tmp11_;
33735 _tmp11_ = analyzer;
33736 if (bala_semantic_analyzer_is_signed_integer_type_argument (_tmp11_, actual_type)) {
33737 BalaCCodeCastExpression* _tmp14_;
33738 BalaCCodeCastExpression* _tmp15_;
33739 gchar* _tmp16_;
33740 gchar* _tmp17_;
33741 BalaCCodeCastExpression* _tmp18_;
33742 while (TRUE(!(0))) {
33743 BalaCCodeExpression* _tmp12_;
33744 BalaCCodeExpression* _tmp13_;
33745 if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_cast_expression_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
33746 break;
33747 }
33748 _tmp12_ = bala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION, BalaCCodeCastExpression)(((BalaCCodeCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_cast_expression_get_type ())))))
);
33749 _tmp13_ = _tmp12_;
33750 cexpr = _tmp13_;
33751 }
33752 _tmp14_ = bala_ccode_cast_expression_new (cexpr, "gintptr");
33753 _tmp15_ = _tmp14_;
33754 _tmp16_ = bala_get_ccode_name ((BalaCodeNode*) actual_type);
33755 _tmp17_ = _tmp16_;
33756 _tmp18_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp15_, _tmp17_);
33757 _bala_ccode_node_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_ccode_node_unref
(_result_), ((void*)0))))
;
33758 _result_ = (BalaCCodeExpression*) _tmp18_;
33759 _g_free0 (_tmp17_)(_tmp17_ = (g_free (_tmp17_), ((void*)0)));
33760 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
33761 } else {
33762 BalaSemanticAnalyzer* _tmp19_;
33763 _tmp19_ = analyzer;
33764 if (bala_semantic_analyzer_is_unsigned_integer_type_argument (_tmp19_, actual_type)) {
33765 BalaCCodeCastExpression* _tmp22_;
33766 BalaCCodeCastExpression* _tmp23_;
33767 gchar* _tmp24_;
33768 gchar* _tmp25_;
33769 BalaCCodeCastExpression* _tmp26_;
33770 while (TRUE(!(0))) {
33771 BalaCCodeExpression* _tmp20_;
33772 BalaCCodeExpression* _tmp21_;
33773 if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_cast_expression_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
33774 break;
33775 }
33776 _tmp20_ = bala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION, BalaCCodeCastExpression)(((BalaCCodeCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_cast_expression_get_type ())))))
);
33777 _tmp21_ = _tmp20_;
33778 cexpr = _tmp21_;
33779 }
33780 _tmp22_ = bala_ccode_cast_expression_new (cexpr, "guintptr");
33781 _tmp23_ = _tmp22_;
33782 _tmp24_ = bala_get_ccode_name ((BalaCodeNode*) actual_type);
33783 _tmp25_ = _tmp24_;
33784 _tmp26_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp23_, _tmp25_);
33785 _bala_ccode_node_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_ccode_node_unref
(_result_), ((void*)0))))
;
33786 _result_ = (BalaCCodeExpression*) _tmp26_;
33787 _g_free0 (_tmp25_)(_tmp25_ = (g_free (_tmp25_), ((void*)0)));
33788 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
33789 }
33790 }
33791 }
33792 result = _result_;
33793 return result;
33794}
33795
33796BalaCCodeExpression*
33797bala_ccode_base_module_convert_to_generic_pointer (BalaCCodeBaseModule* self,
33798 BalaCCodeExpression* cexpr,
33799 BalaDataType* actual_type)
33800{
33801 BalaSemanticAnalyzer* analyzer = NULL((void*)0);
33802 BalaCodeContext* _tmp0_;
33803 BalaSemanticAnalyzer* _tmp1_;
33804 BalaSemanticAnalyzer* _tmp2_;
33805 BalaCCodeExpression* _result_ = NULL((void*)0);
33806 BalaCCodeExpression* _tmp3_;
33807 BalaSemanticAnalyzer* _tmp4_;
33808 BalaCCodeExpression* result = NULL((void*)0);
33809 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
33810 g_return_val_if_fail (cexpr != NULL, NULL)do { if ((cexpr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cexpr != NULL"
); return (((void*)0)); } } while (0)
;
33811 g_return_val_if_fail (actual_type != NULL, NULL)do { if ((actual_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "actual_type != NULL"
); return (((void*)0)); } } while (0)
;
33812 _tmp0_ = self->priv->_context;
33813 _tmp1_ = bala_code_context_get_analyzer (_tmp0_);
33814 _tmp2_ = _tmp1_;
33815 analyzer = _tmp2_;
33816 _tmp3_ = _bala_ccode_node_ref0 (cexpr);
33817 _result_ = _tmp3_;
33818 _tmp4_ = analyzer;
33819 if (bala_semantic_analyzer_is_signed_integer_type_argument (_tmp4_, actual_type)) {
33820 BalaCCodeCastExpression* _tmp7_;
33821 BalaCCodeCastExpression* _tmp8_;
33822 BalaDataType* _tmp9_;
33823 gchar* _tmp10_;
33824 gchar* _tmp11_;
33825 BalaCCodeCastExpression* _tmp12_;
33826 while (TRUE(!(0))) {
33827 BalaCCodeExpression* _tmp5_;
33828 BalaCCodeExpression* _tmp6_;
33829 if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_cast_expression_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
33830 break;
33831 }
33832 _tmp5_ = bala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION, BalaCCodeCastExpression)(((BalaCCodeCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_cast_expression_get_type ())))))
);
33833 _tmp6_ = _tmp5_;
33834 cexpr = _tmp6_;
33835 }
33836 _tmp7_ = bala_ccode_cast_expression_new (cexpr, "gintptr");
33837 _tmp8_ = _tmp7_;
33838 _tmp9_ = self->pointer_type;
33839 _tmp10_ = bala_get_ccode_name ((BalaCodeNode*) _tmp9_);
33840 _tmp11_ = _tmp10_;
33841 _tmp12_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp8_, _tmp11_);
33842 _bala_ccode_node_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_ccode_node_unref
(_result_), ((void*)0))))
;
33843 _result_ = (BalaCCodeExpression*) _tmp12_;
33844 _g_free0 (_tmp11_)(_tmp11_ = (g_free (_tmp11_), ((void*)0)));
33845 _bala_ccode_node_unref0 (_tmp8_)((_tmp8_ == ((void*)0)) ? ((void*)0) : (_tmp8_ = (bala_ccode_node_unref
(_tmp8_), ((void*)0))))
;
33846 } else {
33847 BalaSemanticAnalyzer* _tmp13_;
33848 _tmp13_ = analyzer;
33849 if (bala_semantic_analyzer_is_unsigned_integer_type_argument (_tmp13_, actual_type)) {
33850 BalaCCodeCastExpression* _tmp16_;
33851 BalaCCodeCastExpression* _tmp17_;
33852 BalaDataType* _tmp18_;
33853 gchar* _tmp19_;
33854 gchar* _tmp20_;
33855 BalaCCodeCastExpression* _tmp21_;
33856 while (TRUE(!(0))) {
33857 BalaCCodeExpression* _tmp14_;
33858 BalaCCodeExpression* _tmp15_;
33859 if (!G_TYPE_CHECK_INSTANCE_TYPE (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
cexpr); GType __t = ((bala_ccode_cast_expression_get_type ())
); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; })))
) {
33860 break;
33861 }
33862 _tmp14_ = bala_ccode_cast_expression_get_inner (G_TYPE_CHECK_INSTANCE_CAST (cexpr, BALA_TYPE_CCODE_CAST_EXPRESSION, BalaCCodeCastExpression)(((BalaCCodeCastExpression*) g_type_check_instance_cast ((GTypeInstance
*) (cexpr), ((bala_ccode_cast_expression_get_type ())))))
);
33863 _tmp15_ = _tmp14_;
33864 cexpr = _tmp15_;
33865 }
33866 _tmp16_ = bala_ccode_cast_expression_new (cexpr, "guintptr");
33867 _tmp17_ = _tmp16_;
33868 _tmp18_ = self->pointer_type;
33869 _tmp19_ = bala_get_ccode_name ((BalaCodeNode*) _tmp18_);
33870 _tmp20_ = _tmp19_;
33871 _tmp21_ = bala_ccode_cast_expression_new ((BalaCCodeExpression*) _tmp17_, _tmp20_);
33872 _bala_ccode_node_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_ccode_node_unref
(_result_), ((void*)0))))
;
33873 _result_ = (BalaCCodeExpression*) _tmp21_;
33874 _g_free0 (_tmp20_)(_tmp20_ = (g_free (_tmp20_), ((void*)0)));
33875 _bala_ccode_node_unref0 (_tmp17_)((_tmp17_ == ((void*)0)) ? ((void*)0) : (_tmp17_ = (bala_ccode_node_unref
(_tmp17_), ((void*)0))))
;
33876 }
33877 }
33878 result = _result_;
33879 return result;
33880}
33881
33882BalaTargetValue*
33883bala_ccode_base_module_transform_value (BalaCCodeBaseModule* self,
33884 BalaTargetValue* value,
33885 BalaDataType* target_type,
33886 BalaCodeNode* node)
33887{
33888 BalaDataType* type = NULL((void*)0);
33889 BalaDataType* _tmp0_;
33890 BalaDataType* _tmp1_;
33891 BalaDataType* _tmp2_;
33892 BalaGLibValue* _result_ = NULL((void*)0);
33893 BalaGLibValue* _tmp3_;
33894 gboolean _tmp4_ = FALSE(0);
33895 gboolean _tmp5_ = FALSE(0);
33896 BalaDataType* _tmp6_;
33897 gboolean _tmp7_;
33898 gboolean _tmp8_;
33899 gboolean _tmp63_ = FALSE(0);
33900 gboolean _tmp64_ = FALSE(0);
33901 gboolean _tmp65_ = FALSE(0);
33902 BalaDataType* _tmp66_;
33903 gboolean boxing = FALSE(0);
33904 gboolean _tmp72_ = FALSE(0);
33905 gboolean _tmp73_ = FALSE(0);
33906 gboolean _tmp74_ = FALSE(0);
33907 BalaDataType* _tmp75_;
33908 gboolean unboxing = FALSE(0);
33909 gboolean _tmp81_ = FALSE(0);
33910 gboolean _tmp82_ = FALSE(0);
33911 gboolean _tmp83_ = FALSE(0);
33912 gboolean _tmp84_ = FALSE(0);
33913 BalaCodeContext* _tmp85_;
33914 BalaProfile _tmp86_;
33915 BalaProfile _tmp87_;
33916 gboolean gvalue_boxing = FALSE(0);
33917 gboolean _tmp95_ = FALSE(0);
33918 gboolean _tmp96_ = FALSE(0);
33919 gboolean _tmp97_ = FALSE(0);
33920 gboolean _tmp98_ = FALSE(0);
33921 BalaCodeContext* _tmp99_;
33922 BalaProfile _tmp100_;
33923 BalaProfile _tmp101_;
33924 gboolean gvariant_boxing = FALSE(0);
33925 gboolean _tmp110_ = FALSE(0);
33926 gboolean _tmp111_ = FALSE(0);
33927 BalaDataType* _tmp112_;
33928 gboolean _tmp113_;
33929 gboolean _tmp114_;
33930 BalaGLibValue* _tmp143_;
33931 BalaDataType* _tmp144_;
33932 BalaDataType* _tmp145_;
33933 gboolean array_needs_copy = FALSE(0);
33934 gboolean _tmp356_ = FALSE(0);
33935 BalaDataType* _tmp357_;
33936 gboolean _tmp375_ = FALSE(0);
33937 gboolean _tmp376_ = FALSE(0);
33938 gboolean _tmp377_ = FALSE(0);
33939 gboolean _tmp378_ = FALSE(0);
33940 gboolean _tmp379_ = FALSE(0);
33941 BalaTargetValue* result = NULL((void*)0);
33942 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
33943 g_return_val_if_fail (value != NULL, NULL)do { if ((value != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value != NULL"
); return (((void*)0)); } } while (0)
;
33944 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
33945 _tmp0_ = bala_target_value_get_value_type (value);
33946 _tmp1_ = _tmp0_;
33947 _tmp2_ = _bala_code_node_ref0 (_tmp1_);
33948 type = _tmp2_;
33949 _tmp3_ = bala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (value, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (value), ((bala_glib_value_get_type ())))))
);
33950 _result_ = _tmp3_;
33951 _tmp6_ = type;
33952 _tmp7_ = bala_data_type_get_value_owned (_tmp6_);
33953 _tmp8_ = _tmp7_;
33954 if (_tmp8_) {
33955 gboolean _tmp9_ = FALSE(0);
33956 gboolean _tmp10_ = FALSE(0);
33957 if (target_type == NULL((void*)0)) {
33958 _tmp10_ = TRUE(!(0));
33959 } else {
33960 _tmp10_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
target_type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
33961 }
33962 if (_tmp10_) {
33963 _tmp9_ = TRUE(!(0));
33964 } else {
33965 gboolean _tmp11_;
33966 gboolean _tmp12_;
33967 _tmp11_ = bala_data_type_get_floating_reference (target_type);
33968 _tmp12_ = _tmp11_;
33969 _tmp9_ = !_tmp12_;
33970 }
33971 _tmp5_ = _tmp9_;
33972 } else {
33973 _tmp5_ = FALSE(0);
33974 }
33975 if (_tmp5_) {
33976 BalaDataType* _tmp13_;
33977 gboolean _tmp14_;
33978 gboolean _tmp15_;
33979 _tmp13_ = type;
33980 _tmp14_ = bala_data_type_get_floating_reference (_tmp13_);
33981 _tmp15_ = _tmp14_;
33982 _tmp4_ = _tmp15_;
33983 } else {
33984 _tmp4_ = FALSE(0);
33985 }
33986 if (_tmp4_) {
33987 BalaObjectTypeSymbol* cl = NULL((void*)0);
33988 BalaDataType* _tmp16_;
33989 BalaTypeSymbol* _tmp17_;
33990 BalaTypeSymbol* _tmp18_;
33991 gchar* _tmp19_ = NULL((void*)0);
33992 BalaObjectTypeSymbol* _tmp20_;
33993 gchar* sink_func = NULL((void*)0);
33994 gchar* _tmp24_;
33995 const gchar* _tmp25_;
33996 _tmp16_ = type;
33997 _tmp17_ = bala_data_type_get_type_symbol (_tmp16_);
33998 _tmp18_ = _tmp17_;
33999 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, BALA_TYPE_OBJECT_TYPE_SYMBOL)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp18_); GType __t = ((bala_object_type_symbol_get_type ()))
; gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
? ((BalaObjectTypeSymbol*) _tmp18_) : NULL((void*)0);
34000 _tmp20_ = cl;
34001 if (_tmp20_ != NULL((void*)0)) {
34002 BalaObjectTypeSymbol* _tmp21_;
34003 gchar* _tmp22_;
34004 _tmp21_ = cl;
34005 _tmp22_ = bala_get_ccode_ref_sink_function (_tmp21_);
34006 _g_free0 (_tmp19_)(_tmp19_ = (g_free (_tmp19_), ((void*)0)));
34007 _tmp19_ = _tmp22_;
34008 } else {
34009 gchar* _tmp23_;
34010 _tmp23_ = g_strdup ("");
34011 _g_free0 (_tmp19_)(_tmp19_ = (g_free (_tmp19_), ((void*)0)));
34012 _tmp19_ = _tmp23_;
34013 }
34014 _tmp24_ = g_strdup (_tmp19_);
34015 sink_func = _tmp24_;
34016 _tmp25_ = sink_func;
34017 if (g_strcmp0 (_tmp25_, "") != 0) {
34018 BalaDataType* _tmp26_;
34019 gboolean _tmp27_;
34020 gboolean _tmp28_;
34021 BalaCCodeFunctionCall* csink = NULL((void*)0);
34022 const gchar* _tmp38_;
34023 BalaCCodeIdentifier* _tmp39_;
34024 BalaCCodeIdentifier* _tmp40_;
34025 BalaCCodeFunctionCall* _tmp41_;
34026 BalaCCodeFunctionCall* _tmp42_;
34027 BalaCCodeFunctionCall* _tmp43_;
34028 BalaGLibValue* _tmp44_;
34029 BalaCCodeExpression* _tmp45_;
34030 BalaCCodeFunction* _tmp46_;
34031 BalaCCodeFunction* _tmp47_;
34032 BalaCCodeFunctionCall* _tmp48_;
34033 BalaDataType* _tmp49_;
34034 gboolean _tmp50_;
34035 gboolean _tmp51_;
34036 _tmp26_ = type;
34037 _tmp27_ = bala_data_type_get_nullable (_tmp26_);
34038 _tmp28_ = _tmp27_;
34039 if (_tmp28_) {
34040 BalaCCodeBinaryExpression* is_not_null = NULL((void*)0);
34041 BalaGLibValue* _tmp29_;
34042 BalaCCodeExpression* _tmp30_;
34043 BalaCCodeConstant* _tmp31_;
34044 BalaCCodeConstant* _tmp32_;
34045 BalaCCodeBinaryExpression* _tmp33_;
34046 BalaCCodeBinaryExpression* _tmp34_;
34047 BalaCCodeFunction* _tmp35_;
34048 BalaCCodeFunction* _tmp36_;
34049 BalaCCodeBinaryExpression* _tmp37_;
34050 _tmp29_ = _result_;
34051 _tmp30_ = _tmp29_->cvalue;
34052 _tmp31_ = bala_ccode_constant_new ("NULL");
34053 _tmp32_ = _tmp31_;
34054 _tmp33_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_INEQUALITY, _tmp30_, (BalaCCodeExpression*) _tmp32_);
34055 _tmp34_ = _tmp33_;
34056 _bala_ccode_node_unref0 (_tmp32_)((_tmp32_ == ((void*)0)) ? ((void*)0) : (_tmp32_ = (bala_ccode_node_unref
(_tmp32_), ((void*)0))))
;
34057 is_not_null = _tmp34_;
34058 _tmp35_ = bala_ccode_base_module_get_ccode (self);
34059 _tmp36_ = _tmp35_;
34060 _tmp37_ = is_not_null;
34061 bala_ccode_function_open_if (_tmp36_, (BalaCCodeExpression*) _tmp37_);
34062 _bala_ccode_node_unref0 (is_not_null)((is_not_null == ((void*)0)) ? ((void*)0) : (is_not_null = (bala_ccode_node_unref
(is_not_null), ((void*)0))))
;
34063 }
34064 _tmp38_ = sink_func;
34065 _tmp39_ = bala_ccode_identifier_new (_tmp38_);
34066 _tmp40_ = _tmp39_;
34067 _tmp41_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp40_);
34068 _tmp42_ = _tmp41_;
34069 _bala_ccode_node_unref0 (_tmp40_)((_tmp40_ == ((void*)0)) ? ((void*)0) : (_tmp40_ = (bala_ccode_node_unref
(_tmp40_), ((void*)0))))
;
34070 csink = _tmp42_;
34071 _tmp43_ = csink;
34072 _tmp44_ = _result_;
34073 _tmp45_ = _tmp44_->cvalue;
34074 bala_ccode_function_call_add_argument (_tmp43_, _tmp45_);
34075 _tmp46_ = bala_ccode_base_module_get_ccode (self);
34076 _tmp47_ = _tmp46_;
34077 _tmp48_ = csink;
34078 bala_ccode_function_add_expression (_tmp47_, (BalaCCodeExpression*) _tmp48_);
34079 _tmp49_ = type;
34080 _tmp50_ = bala_data_type_get_nullable (_tmp49_);
34081 _tmp51_ = _tmp50_;
34082 if (_tmp51_) {
34083 BalaCCodeFunction* _tmp52_;
34084 BalaCCodeFunction* _tmp53_;
34085 _tmp52_ = bala_ccode_base_module_get_ccode (self);
34086 _tmp53_ = _tmp52_;
34087 bala_ccode_function_close (_tmp53_);
34088 }
34089 _bala_ccode_node_unref0 (csink)((csink == ((void*)0)) ? ((void*)0) : (csink = (bala_ccode_node_unref
(csink), ((void*)0))))
;
34090 } else {
34091 BalaSourceReference* _tmp54_;
34092 BalaSourceReference* _tmp55_;
34093 BalaDataType* _tmp56_;
34094 BalaTypeSymbol* _tmp57_;
34095 BalaTypeSymbol* _tmp58_;
34096 const gchar* _tmp59_;
34097 const gchar* _tmp60_;
34098 gchar* _tmp61_;
34099 gchar* _tmp62_;
34100 _tmp54_ = bala_code_node_get_source_reference (node);
34101 _tmp55_ = _tmp54_;
34102 _tmp56_ = type;
34103 _tmp57_ = bala_data_type_get_type_symbol (_tmp56_);
34104 _tmp58_ = _tmp57_;
34105 _tmp59_ = bala_symbol_get_name ((BalaSymbol*) _tmp58_);
34106 _tmp60_ = _tmp59_;
34107 _tmp61_ = g_strdup_printf ("type `%s' does not support floating references", _tmp60_);
34108 _tmp62_ = _tmp61_;
34109 bala_report_error (_tmp55_, _tmp62_);
34110 _g_free0 (_tmp62_)(_tmp62_ = (g_free (_tmp62_), ((void*)0)));
34111 }
34112 _g_free0 (sink_func)(sink_func = (g_free (sink_func), ((void*)0)));
34113 _g_free0 (_tmp19_)(_tmp19_ = (g_free (_tmp19_), ((void*)0)));
34114 }
34115 _tmp66_ = type;
34116 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp66_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp66_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
34117 BalaDataType* _tmp67_;
34118 gboolean _tmp68_;
34119 gboolean _tmp69_;
34120 _tmp67_ = type;
34121 _tmp68_ = bala_data_type_get_nullable (_tmp67_);
34122 _tmp69_ = _tmp68_;
34123 _tmp65_ = !_tmp69_;
34124 } else {
34125 _tmp65_ = FALSE(0);
34126 }
34127 if (_tmp65_) {
34128 _tmp64_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
target_type); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
34129 } else {
34130 _tmp64_ = FALSE(0);
34131 }
34132 if (_tmp64_) {
34133 gboolean _tmp70_;
34134 gboolean _tmp71_;
34135 _tmp70_ = bala_data_type_get_nullable (target_type);
34136 _tmp71_ = _tmp70_;
34137 _tmp63_ = _tmp71_;
34138 } else {
34139 _tmp63_ = FALSE(0);
34140 }
34141 boxing = _tmp63_;
34142 _tmp75_ = type;
34143 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp75_, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp75_); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
34144 BalaDataType* _tmp76_;
34145 gboolean _tmp77_;
34146 gboolean _tmp78_;
34147 _tmp76_ = type;
34148 _tmp77_ = bala_data_type_get_nullable (_tmp76_);
34149 _tmp78_ = _tmp77_;
34150 _tmp74_ = _tmp78_;
34151 } else {
34152 _tmp74_ = FALSE(0);
34153 }
34154 if (_tmp74_) {
34155 _tmp73_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, BALA_TYPE_VALUE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
target_type); GType __t = ((bala_value_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
34156 } else {
34157 _tmp73_ = FALSE(0);
34158 }
34159 if (_tmp73_) {
34160 gboolean _tmp79_;
34161 gboolean _tmp80_;
34162 _tmp79_ = bala_data_type_get_nullable (target_type);
34163 _tmp80_ = _tmp79_;
34164 _tmp72_ = !_tmp80_;
34165 } else {
34166 _tmp72_ = FALSE(0);
34167 }
34168 unboxing = _tmp72_;
34169 _tmp85_ = self->priv->_context;
34170 _tmp86_ = bala_code_context_get_profile (_tmp85_);
34171 _tmp87_ = _tmp86_;
34172 if (_tmp87_ == BALA_PROFILE_GOBJECT) {
34173 _tmp84_ = target_type != NULL((void*)0);
34174 } else {
34175 _tmp84_ = FALSE(0);
34176 }
34177 if (_tmp84_) {
34178 BalaTypeSymbol* _tmp88_;
34179 BalaTypeSymbol* _tmp89_;
34180 BalaStruct* _tmp90_;
34181 _tmp88_ = bala_data_type_get_type_symbol (target_type);
34182 _tmp89_ = _tmp88_;
34183 _tmp90_ = self->gvalue_type;
34184 _tmp83_ = _tmp89_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp90_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp90_), ((bala_typesymbol_get_type ())))))
;
34185 } else {
34186 _tmp83_ = FALSE(0);
34187 }
34188 if (_tmp83_) {
34189 BalaDataType* _tmp91_;
34190 _tmp91_ = type;
34191 _tmp82_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp91_, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp91_); GType __t = ((bala_null_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
34192 } else {
34193 _tmp82_ = FALSE(0);
34194 }
34195 if (_tmp82_) {
34196 BalaDataType* _tmp92_;
34197 gchar* _tmp93_;
34198 gchar* _tmp94_;
34199 _tmp92_ = type;
34200 _tmp93_ = bala_get_ccode_type_id ((BalaCodeNode*) _tmp92_);
34201 _tmp94_ = _tmp93_;
34202 _tmp81_ = g_strcmp0 (_tmp94_, "G_TYPE_VALUE") != 0;
34203 _g_free0 (_tmp94_)(_tmp94_ = (g_free (_tmp94_), ((void*)0)));
34204 } else {
34205 _tmp81_ = FALSE(0);
34206 }
34207 gvalue_boxing = _tmp81_;
34208 _tmp99_ = self->priv->_context;
34209 _tmp100_ = bala_code_context_get_profile (_tmp99_);
34210 _tmp101_ = _tmp100_;
34211 if (_tmp101_ == BALA_PROFILE_GOBJECT) {
34212 _tmp98_ = target_type != NULL((void*)0);
34213 } else {
34214 _tmp98_ = FALSE(0);
34215 }
34216 if (_tmp98_) {
34217 BalaTypeSymbol* _tmp102_;
34218 BalaTypeSymbol* _tmp103_;
34219 BalaClass* _tmp104_;
34220 _tmp102_ = bala_data_type_get_type_symbol (target_type);
34221 _tmp103_ = _tmp102_;
34222 _tmp104_ = self->gvariant_type;
34223 _tmp97_ = _tmp103_ == G_TYPE_CHECK_INSTANCE_CAST (_tmp104_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp104_), ((bala_typesymbol_get_type ())))))
;
34224 } else {
34225 _tmp97_ = FALSE(0);
34226 }
34227 if (_tmp97_) {
34228 BalaDataType* _tmp105_;
34229 _tmp105_ = type;
34230 _tmp96_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp105_, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp105_); GType __t = ((bala_null_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
34231 } else {
34232 _tmp96_ = FALSE(0);
34233 }
34234 if (_tmp96_) {
34235 BalaDataType* _tmp106_;
34236 BalaTypeSymbol* _tmp107_;
34237 BalaTypeSymbol* _tmp108_;
34238 BalaClass* _tmp109_;
34239 _tmp106_ = type;
34240 _tmp107_ = bala_data_type_get_type_symbol (_tmp106_);
34241 _tmp108_ = _tmp107_;
34242 _tmp109_ = self->gvariant_type;
34243 _tmp95_ = _tmp108_ != G_TYPE_CHECK_INSTANCE_CAST (_tmp109_, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp109_), ((bala_typesymbol_get_type ())))))
;
34244 } else {
34245 _tmp95_ = FALSE(0);
34246 }
34247 gvariant_boxing = _tmp95_;
34248 _tmp112_ = type;
34249 _tmp113_ = bala_data_type_get_value_owned (_tmp112_);
34250 _tmp114_ = _tmp113_;
34251 if (_tmp114_) {
34252 gboolean _tmp115_ = FALSE(0);
34253 gboolean _tmp116_ = FALSE(0);
34254 gboolean _tmp117_ = FALSE(0);
34255 gboolean _tmp118_ = FALSE(0);
34256 if (target_type == NULL((void*)0)) {
34257 _tmp118_ = TRUE(!(0));
34258 } else {
34259 gboolean _tmp119_;
34260 gboolean _tmp120_;
34261 _tmp119_ = bala_data_type_get_value_owned (target_type);
34262 _tmp120_ = _tmp119_;
34263 _tmp118_ = !_tmp120_;
34264 }
34265 if (_tmp118_) {
34266 _tmp117_ = TRUE(!(0));
34267 } else {
34268 _tmp117_ = boxing;
34269 }
34270 if (_tmp117_) {
34271 _tmp116_ = TRUE(!(0));
34272 } else {
34273 _tmp116_ = unboxing;
34274 }
34275 if (_tmp116_) {
34276 _tmp115_ = TRUE(!(0));
34277 } else {
34278 _tmp115_ = gvariant_boxing;
34279 }
34280 _tmp111_ = _tmp115_;
34281 } else {
34282 _tmp111_ = FALSE(0);
34283 }
34284 if (_tmp111_) {
34285 _tmp110_ = !gvalue_boxing;
34286 } else {
34287 _tmp110_ = FALSE(0);
34288 }
34289 if (_tmp110_) {
34290 if (G_TYPE_CHECK_INSTANCE_TYPE (target_type, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
target_type); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
34291 } else {
34292 BalaDataType* _tmp121_;
34293 _tmp121_ = type;
34294 if (bala_ccode_base_module_requires_destroy (_tmp121_)) {
34295 BalaDataType* _tmp122_;
34296 _tmp122_ = type;
34297 if (!bala_ccode_base_module_is_lvalue_access_allowed (self, _tmp122_)) {
34298 BalaArrayList* _tmp123_;
34299 BalaArrayList* _tmp124_;
34300 BalaGLibValue* _tmp125_;
34301 BalaGLibValue* _tmp126_;
34302 BalaGLibValue* _tmp127_;
34303 _tmp123_ = bala_ccode_base_module_get_temp_ref_values (self);
34304 _tmp124_ = _tmp123_;
34305 _tmp125_ = _result_;
34306 _tmp126_ = bala_glib_value_copy (_tmp125_);
34307 _tmp127_ = _tmp126_;
34308 bala_list_insert ((BalaList*) _tmp124_, 0, (BalaTargetValue*) _tmp127_);
34309 _bala_target_value_unref0 (_tmp127_)((_tmp127_ == ((void*)0)) ? ((void*)0) : (_tmp127_ = (bala_target_value_unref
(_tmp127_), ((void*)0))))
;
34310 } else {
34311 BalaTargetValue* temp_value = NULL((void*)0);
34312 BalaDataType* _tmp128_;
34313 BalaTargetValue* _tmp129_;
34314 BalaArrayList* _tmp130_;
34315 BalaArrayList* _tmp131_;
34316 BalaTargetValue* _tmp132_;
34317 BalaGLibValue* _tmp133_;
34318 BalaGLibValue* _tmp134_;
34319 BalaTargetValue* _tmp135_;
34320 BalaGLibValue* _tmp136_;
34321 BalaSourceReference* _tmp137_;
34322 BalaSourceReference* _tmp138_;
34323 BalaGLibValue* _tmp139_;
34324 BalaTargetValue* _tmp140_;
34325 BalaCCodeExpression* _tmp141_;
34326 BalaCCodeExpression* _tmp142_;
34327 _tmp128_ = type;
34328 _tmp129_ = bala_ccode_base_module_create_temp_value (self, _tmp128_, FALSE(0), node, NULL((void*)0));
34329 temp_value = _tmp129_;
34330 _tmp130_ = bala_ccode_base_module_get_temp_ref_values (self);
34331 _tmp131_ = _tmp130_;
34332 _tmp132_ = temp_value;
34333 _tmp133_ = bala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp132_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp132_), ((bala_glib_value_get_type ())))))
);
34334 _tmp134_ = _tmp133_;
34335 bala_list_insert ((BalaList*) _tmp131_, 0, (BalaTargetValue*) _tmp134_);
34336 _bala_target_value_unref0 (_tmp134_)((_tmp134_ == ((void*)0)) ? ((void*)0) : (_tmp134_ = (bala_target_value_unref
(_tmp134_), ((void*)0))))
;
34337 _tmp135_ = temp_value;
34338 _tmp136_ = _result_;
34339 _tmp137_ = bala_code_node_get_source_reference (node);
34340 _tmp138_ = _tmp137_;
34341 bala_ccode_base_module_store_value (self, _tmp135_, (BalaTargetValue*) _tmp136_, _tmp138_);
34342 _tmp139_ = _result_;
34343 _tmp140_ = temp_value;
34344 _tmp141_ = bala_get_cvalue_ (_tmp140_);
34345 _tmp142_ = _bala_ccode_node_ref0 (_tmp141_);
34346 _bala_ccode_node_unref0 (_tmp139_->cvalue)((_tmp139_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp139_
->cvalue = (bala_ccode_node_unref (_tmp139_->cvalue), (
(void*)0))))
;
34347 _tmp139_->cvalue = _tmp142_;
34348 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
34349 }
34350 }
34351 }
34352 }
34353 if (target_type == NULL((void*)0)) {
34354 result = (BalaTargetValue*) _result_;
34355 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
34356 return result;
34357 }
34358 _tmp143_ = _result_;
34359 _tmp144_ = bala_data_type_copy (target_type);
34360 _tmp145_ = _tmp144_;
34361 bala_target_value_set_value_type ((BalaTargetValue*) _tmp143_, _tmp145_);
34362 _bala_code_node_unref0 (_tmp145_)((_tmp145_ == ((void*)0)) ? ((void*)0) : (_tmp145_ = (bala_code_node_unref
(_tmp145_), ((void*)0))))
;
34363 if (gvalue_boxing) {
34364 BalaTargetValue* temp_value = NULL((void*)0);
34365 gboolean _tmp146_;
34366 BalaTargetValue* _tmp147_;
34367 gboolean _tmp148_;
34368 gboolean _tmp149_;
34369 gboolean _tmp155_;
34370 gboolean _tmp156_;
34371 BalaCCodeFunctionCall* ccall = NULL((void*)0);
34372 BalaCCodeIdentifier* _tmp174_;
34373 BalaCCodeIdentifier* _tmp175_;
34374 BalaCCodeFunctionCall* _tmp176_;
34375 BalaCCodeFunctionCall* _tmp177_;
34376 gboolean _tmp178_;
34377 gboolean _tmp179_;
34378 gchar* type_id = NULL((void*)0);
34379 BalaDataType* _tmp188_;
34380 gchar* _tmp189_;
34381 const gchar* _tmp190_;
34382 BalaCCodeFunctionCall* _tmp198_;
34383 const gchar* _tmp199_;
34384 BalaCCodeIdentifier* _tmp200_;
34385 BalaCCodeIdentifier* _tmp201_;
34386 BalaCCodeFunction* _tmp202_;
34387 BalaCCodeFunction* _tmp203_;
34388 BalaCCodeFunctionCall* _tmp204_;
34389 BalaDataType* _tmp205_;
34390 gboolean _tmp214_;
34391 gboolean _tmp215_;
34392 BalaDataType* _tmp224_;
34393 BalaCCodeFunction* _tmp233_;
34394 BalaCCodeFunction* _tmp234_;
34395 BalaCCodeFunctionCall* _tmp235_;
34396 BalaTargetValue* _tmp236_;
34397 BalaGLibValue* _tmp237_;
34398 _tmp146_ = TRUE(!(0));
34399 _tmp147_ = bala_ccode_base_module_create_temp_value (self, target_type, TRUE(!(0)), node, &_tmp146_);
34400 temp_value = _tmp147_;
34401 _tmp148_ = bala_data_type_get_value_owned (target_type);
34402 _tmp149_ = _tmp148_;
34403 if (!_tmp149_) {
34404 BalaArrayList* _tmp150_;
34405 BalaArrayList* _tmp151_;
34406 BalaTargetValue* _tmp152_;
34407 BalaGLibValue* _tmp153_;
34408 BalaGLibValue* _tmp154_;
34409 _tmp150_ = bala_ccode_base_module_get_temp_ref_values (self);
34410 _tmp151_ = _tmp150_;
34411 _tmp152_ = temp_value;
34412 _tmp153_ = bala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp152_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp152_), ((bala_glib_value_get_type ())))))
);
34413 _tmp154_ = _tmp153_;
34414 bala_list_insert ((BalaList*) _tmp151_, 0, (BalaTargetValue*) _tmp154_);
34415 _bala_target_value_unref0 (_tmp154_)((_tmp154_ == ((void*)0)) ? ((void*)0) : (_tmp154_ = (bala_target_value_unref
(_tmp154_), ((void*)0))))
;
34416 }
34417 _tmp155_ = bala_data_type_get_nullable (target_type);
34418 _tmp156_ = _tmp155_;
34419 if (_tmp156_) {
34420 BalaCCodeFunctionCall* newcall = NULL((void*)0);
34421 BalaCCodeIdentifier* _tmp157_;
34422 BalaCCodeIdentifier* _tmp158_;
34423 BalaCCodeFunctionCall* _tmp159_;
34424 BalaCCodeFunctionCall* _tmp160_;
34425 BalaCCodeFunctionCall* _tmp161_;
34426 BalaCCodeConstant* _tmp162_;
34427 BalaCCodeConstant* _tmp163_;
34428 BalaCCodeFunctionCall* _tmp164_;
34429 BalaCCodeConstant* _tmp165_;
34430 BalaCCodeConstant* _tmp166_;
34431 BalaCCodeAssignment* newassignment = NULL((void*)0);
34432 BalaTargetValue* _tmp167_;
34433 BalaCCodeExpression* _tmp168_;
34434 BalaCCodeFunctionCall* _tmp169_;
34435 BalaCCodeAssignment* _tmp170_;
34436 BalaCCodeFunction* _tmp171_;
34437 BalaCCodeFunction* _tmp172_;
34438 BalaCCodeAssignment* _tmp173_;
34439 _tmp157_ = bala_ccode_identifier_new ("g_new0");
34440 _tmp158_ = _tmp157_;
34441 _tmp159_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp158_);
34442 _tmp160_ = _tmp159_;
34443 _bala_ccode_node_unref0 (_tmp158_)((_tmp158_ == ((void*)0)) ? ((void*)0) : (_tmp158_ = (bala_ccode_node_unref
(_tmp158_), ((void*)0))))
;
34444 newcall = _tmp160_;
34445 _tmp161_ = newcall;
34446 _tmp162_ = bala_ccode_constant_new ("GValue");
34447 _tmp163_ = _tmp162_;
34448 bala_ccode_function_call_add_argument (_tmp161_, (BalaCCodeExpression*) _tmp163_);
34449 _bala_ccode_node_unref0 (_tmp163_)((_tmp163_ == ((void*)0)) ? ((void*)0) : (_tmp163_ = (bala_ccode_node_unref
(_tmp163_), ((void*)0))))
;
34450 _tmp164_ = newcall;
34451 _tmp165_ = bala_ccode_constant_new ("1");
34452 _tmp166_ = _tmp165_;
34453 bala_ccode_function_call_add_argument (_tmp164_, (BalaCCodeExpression*) _tmp166_);
34454 _bala_ccode_node_unref0 (_tmp166_)((_tmp166_ == ((void*)0)) ? ((void*)0) : (_tmp166_ = (bala_ccode_node_unref
(_tmp166_), ((void*)0))))
;
34455 _tmp167_ = temp_value;
34456 _tmp168_ = bala_get_cvalue_ (_tmp167_);
34457 _tmp169_ = newcall;
34458 _tmp170_ = bala_ccode_assignment_new (_tmp168_, (BalaCCodeExpression*) _tmp169_, BALA_CCODE_ASSIGNMENT_OPERATOR_SIMPLE);
34459 newassignment = _tmp170_;
34460 _tmp171_ = bala_ccode_base_module_get_ccode (self);
34461 _tmp172_ = _tmp171_;
34462 _tmp173_ = newassignment;
34463 bala_ccode_function_add_expression (_tmp172_, (BalaCCodeExpression*) _tmp173_);
34464 _bala_ccode_node_unref0 (newassignment)((newassignment == ((void*)0)) ? ((void*)0) : (newassignment =
(bala_ccode_node_unref (newassignment), ((void*)0))))
;
34465 _bala_ccode_node_unref0 (newcall)((newcall == ((void*)0)) ? ((void*)0) : (newcall = (bala_ccode_node_unref
(newcall), ((void*)0))))
;
34466 }
34467 _tmp174_ = bala_ccode_identifier_new ("g_value_init");
34468 _tmp175_ = _tmp174_;
34469 _tmp176_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp175_);
34470 _tmp177_ = _tmp176_;
34471 _bala_ccode_node_unref0 (_tmp175_)((_tmp175_ == ((void*)0)) ? ((void*)0) : (_tmp175_ = (bala_ccode_node_unref
(_tmp175_), ((void*)0))))
;
34472 ccall = _tmp177_;
34473 _tmp178_ = bala_data_type_get_nullable (target_type);
34474 _tmp179_ = _tmp178_;
34475 if (_tmp179_) {
34476 BalaCCodeFunctionCall* _tmp180_;
34477 BalaTargetValue* _tmp181_;
34478 BalaCCodeExpression* _tmp182_;
34479 _tmp180_ = ccall;
34480 _tmp181_ = temp_value;
34481 _tmp182_ = bala_get_cvalue_ (_tmp181_);
34482 bala_ccode_function_call_add_argument (_tmp180_, _tmp182_);
34483 } else {
34484 BalaCCodeFunctionCall* _tmp183_;
34485 BalaTargetValue* _tmp184_;
34486 BalaCCodeExpression* _tmp185_;
34487 BalaCCodeUnaryExpression* _tmp186_;
34488 BalaCCodeUnaryExpression* _tmp187_;
34489 _tmp183_ = ccall;
34490 _tmp184_ = temp_value;
34491 _tmp185_ = bala_get_cvalue_ (_tmp184_);
34492 _tmp186_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp185_);
34493 _tmp187_ = _tmp186_;
34494 bala_ccode_function_call_add_argument (_tmp183_, (BalaCCodeExpression*) _tmp187_);
34495 _bala_ccode_node_unref0 (_tmp187_)((_tmp187_ == ((void*)0)) ? ((void*)0) : (_tmp187_ = (bala_ccode_node_unref
(_tmp187_), ((void*)0))))
;
34496 }
34497 _tmp188_ = type;
34498 _tmp189_ = bala_get_ccode_type_id ((BalaCodeNode*) _tmp188_);
34499 type_id = _tmp189_;
34500 _tmp190_ = type_id;
34501 if (g_strcmp0 (_tmp190_, "") == 0) {
34502 BalaSourceReference* _tmp191_;
34503 BalaSourceReference* _tmp192_;
34504 BalaDataType* _tmp193_;
34505 gchar* _tmp194_;
34506 gchar* _tmp195_;
34507 gchar* _tmp196_;
34508 gchar* _tmp197_;
34509 _tmp191_ = bala_code_node_get_source_reference (node);
34510 _tmp192_ = _tmp191_;
34511 _tmp193_ = type;
34512 _tmp194_ = bala_code_node_to_string ((BalaCodeNode*) _tmp193_);
34513 _tmp195_ = _tmp194_;
34514 _tmp196_ = g_strdup_printf ("GValue boxing of type `%s' is not supported", _tmp195_);
34515 _tmp197_ = _tmp196_;
34516 bala_report_error (_tmp192_, _tmp197_);
34517 _g_free0 (_tmp197_)(_tmp197_ = (g_free (_tmp197_), ((void*)0)));
34518 _g_free0 (_tmp195_)(_tmp195_ = (g_free (_tmp195_), ((void*)0)));
34519 }
34520 _tmp198_ = ccall;
34521 _tmp199_ = type_id;
34522 _tmp200_ = bala_ccode_identifier_new (_tmp199_);
34523 _tmp201_ = _tmp200_;
34524 bala_ccode_function_call_add_argument (_tmp198_, (BalaCCodeExpression*) _tmp201_);
34525 _bala_ccode_node_unref0 (_tmp201_)((_tmp201_ == ((void*)0)) ? ((void*)0) : (_tmp201_ = (bala_ccode_node_unref
(_tmp201_), ((void*)0))))
;
34526 _tmp202_ = bala_ccode_base_module_get_ccode (self);
34527 _tmp203_ = _tmp202_;
34528 _tmp204_ = ccall;
34529 bala_ccode_function_add_expression (_tmp203_, (BalaCCodeExpression*) _tmp204_);
34530 _tmp205_ = type;
34531 if (bala_ccode_base_module_requires_destroy (_tmp205_)) {
34532 BalaDataType* _tmp206_;
34533 BalaCCodeExpression* _tmp207_;
34534 BalaCCodeExpression* _tmp208_;
34535 BalaCCodeFunctionCall* _tmp209_;
34536 _tmp206_ = type;
34537 _tmp207_ = bala_ccode_base_module_get_value_taker_function (self, _tmp206_);
34538 _tmp208_ = _tmp207_;
34539 _tmp209_ = bala_ccode_function_call_new (_tmp208_);
34540 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
34541 ccall = _tmp209_;
34542 _bala_ccode_node_unref0 (_tmp208_)((_tmp208_ == ((void*)0)) ? ((void*)0) : (_tmp208_ = (bala_ccode_node_unref
(_tmp208_), ((void*)0))))
;
34543 } else {
34544 BalaDataType* _tmp210_;
34545 BalaCCodeExpression* _tmp211_;
34546 BalaCCodeExpression* _tmp212_;
34547 BalaCCodeFunctionCall* _tmp213_;
34548 _tmp210_ = type;
34549 _tmp211_ = bala_ccode_base_module_get_value_setter_function (self, _tmp210_);
34550 _tmp212_ = _tmp211_;
34551 _tmp213_ = bala_ccode_function_call_new (_tmp212_);
34552 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
34553 ccall = _tmp213_;
34554 _bala_ccode_node_unref0 (_tmp212_)((_tmp212_ == ((void*)0)) ? ((void*)0) : (_tmp212_ = (bala_ccode_node_unref
(_tmp212_), ((void*)0))))
;
34555 }
34556 _tmp214_ = bala_data_type_get_nullable (target_type);
34557 _tmp215_ = _tmp214_;
34558 if (_tmp215_) {
34559 BalaCCodeFunctionCall* _tmp216_;
34560 BalaTargetValue* _tmp217_;
34561 BalaCCodeExpression* _tmp218_;
34562 _tmp216_ = ccall;
34563 _tmp217_ = temp_value;
34564 _tmp218_ = bala_get_cvalue_ (_tmp217_);
34565 bala_ccode_function_call_add_argument (_tmp216_, _tmp218_);
34566 } else {
34567 BalaCCodeFunctionCall* _tmp219_;
34568 BalaTargetValue* _tmp220_;
34569 BalaCCodeExpression* _tmp221_;
34570 BalaCCodeUnaryExpression* _tmp222_;
34571 BalaCCodeUnaryExpression* _tmp223_;
34572 _tmp219_ = ccall;
34573 _tmp220_ = temp_value;
34574 _tmp221_ = bala_get_cvalue_ (_tmp220_);
34575 _tmp222_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp221_);
34576 _tmp223_ = _tmp222_;
34577 bala_ccode_function_call_add_argument (_tmp219_, (BalaCCodeExpression*) _tmp223_);
34578 _bala_ccode_node_unref0 (_tmp223_)((_tmp223_ == ((void*)0)) ? ((void*)0) : (_tmp223_ = (bala_ccode_node_unref
(_tmp223_), ((void*)0))))
;
34579 }
34580 _tmp224_ = type;
34581 if (bala_data_type_is_real_non_null_struct_type (_tmp224_)) {
34582 BalaCCodeFunctionCall* _tmp225_;
34583 BalaGLibValue* _tmp226_;
34584 BalaCCodeExpression* _tmp227_;
34585 BalaCCodeUnaryExpression* _tmp228_;
34586 BalaCCodeUnaryExpression* _tmp229_;
34587 _tmp225_ = ccall;
34588 _tmp226_ = _result_;
34589 _tmp227_ = _tmp226_->cvalue;
34590 _tmp228_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp227_);
34591 _tmp229_ = _tmp228_;
34592 bala_ccode_function_call_add_argument (_tmp225_, (BalaCCodeExpression*) _tmp229_);
34593 _bala_ccode_node_unref0 (_tmp229_)((_tmp229_ == ((void*)0)) ? ((void*)0) : (_tmp229_ = (bala_ccode_node_unref
(_tmp229_), ((void*)0))))
;
34594 } else {
34595 BalaCCodeFunctionCall* _tmp230_;
34596 BalaGLibValue* _tmp231_;
34597 BalaCCodeExpression* _tmp232_;
34598 _tmp230_ = ccall;
34599 _tmp231_ = _result_;
34600 _tmp232_ = _tmp231_->cvalue;
34601 bala_ccode_function_call_add_argument (_tmp230_, _tmp232_);
34602 }
34603 _tmp233_ = bala_ccode_base_module_get_ccode (self);
34604 _tmp234_ = _tmp233_;
34605 _tmp235_ = ccall;
34606 bala_ccode_function_add_expression (_tmp234_, (BalaCCodeExpression*) _tmp235_);
34607 _tmp236_ = temp_value;
34608 _tmp237_ = _bala_target_value_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp236_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp236_), ((bala_glib_value_get_type ())))))
);
34609 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
34610 _result_ = _tmp237_;
34611 _g_free0 (type_id)(type_id = (g_free (type_id), ((void*)0)));
34612 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
34613 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
34614 } else {
34615 if (gvariant_boxing) {
34616 gchar* variant_func = NULL((void*)0);
34617 gint _tmp238_;
34618 gchar* _tmp239_;
34619 BalaCCodeFunctionCall* ccall = NULL((void*)0);
34620 const gchar* _tmp240_;
34621 BalaCCodeIdentifier* _tmp241_;
34622 BalaCCodeIdentifier* _tmp242_;
34623 BalaCCodeFunctionCall* _tmp243_;
34624 BalaCCodeFunctionCall* _tmp244_;
34625 BalaCCodeFunctionCall* _tmp245_;
34626 BalaGLibValue* _tmp246_;
34627 BalaCCodeExpression* _tmp247_;
34628 BalaCCodeFunction* cfunc = NULL((void*)0);
34629 const gchar* _tmp248_;
34630 BalaCCodeFunction* _tmp249_;
34631 BalaCCodeFunction* _tmp250_;
34632 BalaCCodeFunction* _tmp251_;
34633 BalaDataType* _tmp252_;
34634 gchar* _tmp253_;
34635 gchar* _tmp254_;
34636 BalaCCodeParameter* _tmp255_;
34637 BalaCCodeParameter* _tmp256_;
34638 BalaDataType* _tmp257_;
34639 BalaCCodeFunction* _tmp276_;
34640 BalaCCodeFunctionCall* sink = NULL((void*)0);
34641 BalaCCodeIdentifier* _tmp277_;
34642 BalaCCodeIdentifier* _tmp278_;
34643 BalaCCodeFunctionCall* _tmp279_;
34644 BalaCCodeFunctionCall* _tmp280_;
34645 BalaCCodeFunctionCall* _tmp281_;
34646 BalaDataType* _tmp282_;
34647 BalaCCodeIdentifier* _tmp283_;
34648 BalaCCodeIdentifier* _tmp284_;
34649 BalaCCodeExpression* _tmp285_;
34650 BalaCCodeExpression* _tmp286_;
34651 BalaCCodeFunction* _tmp287_;
34652 BalaCCodeFunction* _tmp288_;
34653 BalaCCodeFunctionCall* _tmp289_;
34654 BalaCCodeFile* _tmp290_;
34655 BalaCCodeFunction* _tmp291_;
34656 BalaCCodeFile* _tmp292_;
34657 BalaCCodeFunction* _tmp293_;
34658 BalaGLibValue* _tmp294_;
34659 BalaCCodeFunctionCall* _tmp295_;
34660 BalaCCodeExpression* _tmp296_;
34661 BalaGLibValue* _tmp297_;
34662 BalaDataType* _tmp298_;
34663 BalaDataType* _tmp299_;
34664 BalaGLibValue* _tmp300_;
34665 BalaTargetValue* _tmp301_;
34666 gboolean _tmp302_;
34667 gboolean _tmp303_;
34668 self->priv->next_variant_function_id = self->priv->next_variant_function_id + 1;
34669 _tmp238_ = self->priv->next_variant_function_id;
34670 _tmp239_ = g_strdup_printf ("_variant_new%d", _tmp238_);
34671 variant_func = _tmp239_;
34672 _tmp240_ = variant_func;
34673 _tmp241_ = bala_ccode_identifier_new (_tmp240_);
34674 _tmp242_ = _tmp241_;
34675 _tmp243_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp242_);
34676 _tmp244_ = _tmp243_;
34677 _bala_ccode_node_unref0 (_tmp242_)((_tmp242_ == ((void*)0)) ? ((void*)0) : (_tmp242_ = (bala_ccode_node_unref
(_tmp242_), ((void*)0))))
;
34678 ccall = _tmp244_;
34679 _tmp245_ = ccall;
34680 _tmp246_ = _result_;
34681 _tmp247_ = _tmp246_->cvalue;
34682 bala_ccode_function_call_add_argument (_tmp245_, _tmp247_);
34683 _tmp248_ = variant_func;
34684 _tmp249_ = bala_ccode_function_new (_tmp248_, "GVariant*");
34685 cfunc = _tmp249_;
34686 _tmp250_ = cfunc;
34687 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp250_, BALA_CCODE_MODIFIERS_STATIC);
34688 _tmp251_ = cfunc;
34689 _tmp252_ = type;
34690 _tmp253_ = bala_get_ccode_name ((BalaCodeNode*) _tmp252_);
34691 _tmp254_ = _tmp253_;
34692 _tmp255_ = bala_ccode_parameter_new ("value", _tmp254_);
34693 _tmp256_ = _tmp255_;
34694 bala_ccode_function_add_parameter (_tmp251_, _tmp256_);
34695 _bala_ccode_node_unref0 (_tmp256_)((_tmp256_ == ((void*)0)) ? ((void*)0) : (_tmp256_ = (bala_ccode_node_unref
(_tmp256_), ((void*)0))))
;
34696 _g_free0 (_tmp254_)(_tmp254_ = (g_free (_tmp254_), ((void*)0)));
34697 _tmp257_ = type;
34698 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp257_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp257_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
34699 BalaArrayType* array_type = NULL((void*)0);
34700 BalaDataType* _tmp258_;
34701 BalaArrayType* _tmp259_;
34702 gchar* length_ctype = NULL((void*)0);
34703 BalaArrayType* _tmp260_;
34704 gchar* _tmp261_;
34705 _tmp258_ = type;
34706 _tmp259_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp258_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp258_), ((bala_array_type_get_type ())))))
);
34707 array_type = _tmp259_;
34708 _tmp260_ = array_type;
34709 _tmp261_ = bala_get_ccode_array_length_type ((BalaCodeNode*) _tmp260_);
34710 length_ctype = _tmp261_;
34711 {
34712 gint dim = 0;
34713 dim = 1;
34714 {
34715 gboolean _tmp262_ = FALSE(0);
34716 _tmp262_ = TRUE(!(0));
34717 while (TRUE(!(0))) {
34718 BalaArrayType* _tmp264_;
34719 gint _tmp265_;
34720 gint _tmp266_;
34721 BalaCCodeFunctionCall* _tmp267_;
34722 BalaCCodeExpression* _tmp268_;
34723 BalaCCodeExpression* _tmp269_;
34724 BalaCCodeFunction* _tmp270_;
34725 gchar* _tmp271_;
34726 gchar* _tmp272_;
34727 const gchar* _tmp273_;
34728 BalaCCodeParameter* _tmp274_;
34729 BalaCCodeParameter* _tmp275_;
34730 if (!_tmp262_) {
34731 gint _tmp263_;
34732 _tmp263_ = dim;
34733 dim = _tmp263_ + 1;
34734 }
34735 _tmp262_ = FALSE(0);
34736 _tmp264_ = array_type;
34737 _tmp265_ = bala_array_type_get_rank (_tmp264_);
34738 _tmp266_ = _tmp265_;
34739 if (!(dim <= _tmp266_)) {
34740 break;
34741 }
34742 _tmp267_ = ccall;
34743 _tmp268_ = bala_ccode_base_module_get_array_length_cvalue (self, value, dim);
34744 _tmp269_ = _tmp268_;
34745 bala_ccode_function_call_add_argument (_tmp267_, _tmp269_);
34746 _bala_ccode_node_unref0 (_tmp269_)((_tmp269_ == ((void*)0)) ? ((void*)0) : (_tmp269_ = (bala_ccode_node_unref
(_tmp269_), ((void*)0))))
;
34747 _tmp270_ = cfunc;
34748 _tmp271_ = bala_ccode_base_module_get_array_length_cname (self, "value", dim);
34749 _tmp272_ = _tmp271_;
34750 _tmp273_ = length_ctype;
34751 _tmp274_ = bala_ccode_parameter_new (_tmp272_, _tmp273_);
34752 _tmp275_ = _tmp274_;
34753 bala_ccode_function_add_parameter (_tmp270_, _tmp275_);
34754 _bala_ccode_node_unref0 (_tmp275_)((_tmp275_ == ((void*)0)) ? ((void*)0) : (_tmp275_ = (bala_ccode_node_unref
(_tmp275_), ((void*)0))))
;
34755 _g_free0 (_tmp272_)(_tmp272_ = (g_free (_tmp272_), ((void*)0)));
34756 }
34757 }
34758 }
34759 _g_free0 (length_ctype)(length_ctype = (g_free (length_ctype), ((void*)0)));
34760 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
34761 }
34762 _tmp276_ = cfunc;
34763 bala_ccode_base_module_push_function (self, _tmp276_);
34764 _tmp277_ = bala_ccode_identifier_new ("g_variant_ref_sink");
34765 _tmp278_ = _tmp277_;
34766 _tmp279_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp278_);
34767 _tmp280_ = _tmp279_;
34768 _bala_ccode_node_unref0 (_tmp278_)((_tmp278_ == ((void*)0)) ? ((void*)0) : (_tmp278_ = (bala_ccode_node_unref
(_tmp278_), ((void*)0))))
;
34769 sink = _tmp280_;
34770 _tmp281_ = sink;
34771 _tmp282_ = type;
34772 _tmp283_ = bala_ccode_identifier_new ("value");
34773 _tmp284_ = _tmp283_;
34774 _tmp285_ = bala_ccode_base_module_serialize_expression (self, _tmp282_, (BalaCCodeExpression*) _tmp284_);
34775 _tmp286_ = _tmp285_;
34776 bala_ccode_function_call_add_argument (_tmp281_, _tmp286_);
34777 _bala_ccode_node_unref0 (_tmp286_)((_tmp286_ == ((void*)0)) ? ((void*)0) : (_tmp286_ = (bala_ccode_node_unref
(_tmp286_), ((void*)0))))
;
34778 _bala_ccode_node_unref0 (_tmp284_)((_tmp284_ == ((void*)0)) ? ((void*)0) : (_tmp284_ = (bala_ccode_node_unref
(_tmp284_), ((void*)0))))
;
34779 _tmp287_ = bala_ccode_base_module_get_ccode (self);
34780 _tmp288_ = _tmp287_;
34781 _tmp289_ = sink;
34782 bala_ccode_function_add_return (_tmp288_, (BalaCCodeExpression*) _tmp289_);
34783 bala_ccode_base_module_pop_function (self);
34784 _tmp290_ = self->cfile;
34785 _tmp291_ = cfunc;
34786 bala_ccode_file_add_function_declaration (_tmp290_, _tmp291_);
34787 _tmp292_ = self->cfile;
34788 _tmp293_ = cfunc;
34789 bala_ccode_file_add_function (_tmp292_, _tmp293_);
34790 _tmp294_ = _result_;
34791 _tmp295_ = ccall;
34792 _tmp296_ = _bala_ccode_node_ref0 ((BalaCCodeExpression*) _tmp295_);
34793 _bala_ccode_node_unref0 (_tmp294_->cvalue)((_tmp294_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp294_
->cvalue = (bala_ccode_node_unref (_tmp294_->cvalue), (
(void*)0))))
;
34794 _tmp294_->cvalue = _tmp296_;
34795 _tmp297_ = _result_;
34796 _tmp298_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp297_);
34797 _tmp299_ = _tmp298_;
34798 bala_data_type_set_value_owned (_tmp299_, TRUE(!(0)));
34799 _tmp300_ = _result_;
34800 _tmp301_ = bala_ccode_base_module_store_temp_value (self, (BalaTargetValue*) _tmp300_, node, NULL((void*)0));
34801 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
34802 _result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp301_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp301_), ((bala_glib_value_get_type ())))))
;
34803 _tmp302_ = bala_data_type_get_value_owned (target_type);
34804 _tmp303_ = _tmp302_;
34805 if (!_tmp303_) {
34806 BalaArrayList* _tmp304_;
34807 BalaArrayList* _tmp305_;
34808 BalaGLibValue* _tmp306_;
34809 BalaGLibValue* _tmp307_;
34810 BalaGLibValue* _tmp308_;
34811 _tmp304_ = bala_ccode_base_module_get_temp_ref_values (self);
34812 _tmp305_ = _tmp304_;
34813 _tmp306_ = _result_;
34814 _tmp307_ = bala_glib_value_copy (G_TYPE_CHECK_INSTANCE_CAST (_tmp306_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp306_), ((bala_glib_value_get_type ())))))
);
34815 _tmp308_ = _tmp307_;
34816 bala_list_insert ((BalaList*) _tmp305_, 0, (BalaTargetValue*) _tmp308_);
34817 _bala_target_value_unref0 (_tmp308_)((_tmp308_ == ((void*)0)) ? ((void*)0) : (_tmp308_ = (bala_target_value_unref
(_tmp308_), ((void*)0))))
;
34818 }
34819 _bala_ccode_node_unref0 (sink)((sink == ((void*)0)) ? ((void*)0) : (sink = (bala_ccode_node_unref
(sink), ((void*)0))))
;
34820 _bala_ccode_node_unref0 (cfunc)((cfunc == ((void*)0)) ? ((void*)0) : (cfunc = (bala_ccode_node_unref
(cfunc), ((void*)0))))
;
34821 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
34822 _g_free0 (variant_func)(variant_func = (g_free (variant_func), ((void*)0)));
34823 } else {
34824 if (boxing) {
34825 BalaGLibValue* _tmp309_;
34826 BalaDataType* _tmp310_;
34827 BalaDataType* _tmp311_;
34828 gboolean _tmp312_ = FALSE(0);
34829 BalaGLibValue* _tmp313_;
34830 BalaGLibValue* _tmp330_;
34831 BalaGLibValue* _tmp331_;
34832 BalaCCodeExpression* _tmp332_;
34833 BalaCCodeUnaryExpression* _tmp333_;
34834 BalaGLibValue* _tmp334_;
34835 BalaGLibValue* _tmp335_;
34836 BalaDataType* _tmp336_;
34837 BalaDataType* _tmp337_;
34838 _tmp309_ = _result_;
34839 _tmp310_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp309_);
34840 _tmp311_ = _tmp310_;
34841 bala_data_type_set_nullable (_tmp311_, FALSE(0));
34842 _tmp313_ = _result_;
34843 if (!_tmp313_->lvalue) {
34844 _tmp312_ = TRUE(!(0));
34845 } else {
34846 BalaGLibValue* _tmp314_;
34847 BalaDataType* _tmp315_;
34848 BalaDataType* _tmp316_;
34849 BalaDataType* _tmp317_;
34850 BalaDataType* _tmp318_;
34851 _tmp314_ = _result_;
34852 _tmp315_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp314_);
34853 _tmp316_ = _tmp315_;
34854 _tmp317_ = bala_target_value_get_value_type (value);
34855 _tmp318_ = _tmp317_;
34856 _tmp312_ = !bala_data_type_equals (_tmp316_, _tmp318_);
34857 }
34858 if (_tmp312_) {
34859 BalaGLibValue* _tmp319_;
34860 BalaGLibValue* _tmp320_;
34861 BalaCCodeExpression* _tmp321_;
34862 BalaDataType* _tmp322_;
34863 BalaDataType* _tmp323_;
34864 BalaGLibValue* _tmp324_;
34865 BalaDataType* _tmp325_;
34866 BalaDataType* _tmp326_;
34867 BalaCCodeExpression* _tmp327_;
34868 BalaGLibValue* _tmp328_;
34869 BalaTargetValue* _tmp329_;
34870 _tmp319_ = _result_;
34871 _tmp320_ = _result_;
34872 _tmp321_ = _tmp320_->cvalue;
34873 _tmp322_ = bala_target_value_get_value_type (value);
34874 _tmp323_ = _tmp322_;
34875 _tmp324_ = _result_;
34876 _tmp325_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp324_);
34877 _tmp326_ = _tmp325_;
34878 _tmp327_ = bala_ccode_base_module_get_implicit_cast_expression (self, _tmp321_, _tmp323_, _tmp326_, node);
34879 _bala_ccode_node_unref0 (_tmp319_->cvalue)((_tmp319_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp319_
->cvalue = (bala_ccode_node_unref (_tmp319_->cvalue), (
(void*)0))))
;
34880 _tmp319_->cvalue = _tmp327_;
34881 _tmp328_ = _result_;
34882 _tmp329_ = bala_ccode_base_module_store_temp_value (self, (BalaTargetValue*) _tmp328_, node, NULL((void*)0));
34883 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
34884 _result_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp329_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp329_), ((bala_glib_value_get_type ())))))
;
34885 }
34886 _tmp330_ = _result_;
34887 _tmp331_ = _result_;
34888 _tmp332_ = _tmp331_->cvalue;
34889 _tmp333_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp332_);
34890 _bala_ccode_node_unref0 (_tmp330_->cvalue)((_tmp330_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp330_
->cvalue = (bala_ccode_node_unref (_tmp330_->cvalue), (
(void*)0))))
;
34891 _tmp330_->cvalue = (BalaCCodeExpression*) _tmp333_;
34892 _tmp334_ = _result_;
34893 _tmp334_->lvalue = FALSE(0);
34894 _tmp335_ = _result_;
34895 _tmp336_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp335_);
34896 _tmp337_ = _tmp336_;
34897 bala_data_type_set_nullable (_tmp337_, TRUE(!(0)));
34898 } else {
34899 if (unboxing) {
34900 BalaGLibValue* _tmp338_;
34901 BalaGLibValue* _tmp339_;
34902 BalaCCodeExpression* _tmp340_;
34903 BalaCCodeUnaryExpression* _tmp341_;
34904 _tmp338_ = _result_;
34905 _tmp339_ = _result_;
34906 _tmp340_ = _tmp339_->cvalue;
34907 _tmp341_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_POINTER_INDIRECTION, _tmp340_);
34908 _bala_ccode_node_unref0 (_tmp338_->cvalue)((_tmp338_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp338_
->cvalue = (bala_ccode_node_unref (_tmp338_->cvalue), (
(void*)0))))
;
34909 _tmp338_->cvalue = (BalaCCodeExpression*) _tmp341_;
34910 } else {
34911 BalaCCodeExpression* old_cexpr = NULL((void*)0);
34912 BalaGLibValue* _tmp342_;
34913 BalaCCodeExpression* _tmp343_;
34914 BalaCCodeExpression* _tmp344_;
34915 BalaGLibValue* _tmp345_;
34916 BalaGLibValue* _tmp346_;
34917 BalaCCodeExpression* _tmp347_;
34918 BalaDataType* _tmp348_;
34919 BalaCCodeExpression* _tmp349_;
34920 gboolean _tmp350_ = FALSE(0);
34921 BalaGLibValue* _tmp351_;
34922 BalaGLibValue* _tmp355_;
34923 _tmp342_ = _result_;
34924 _tmp343_ = _tmp342_->cvalue;
34925 _tmp344_ = _bala_ccode_node_ref0 (_tmp343_);
34926 old_cexpr = _tmp344_;
34927 _tmp345_ = _result_;
34928 _tmp346_ = _result_;
34929 _tmp347_ = _tmp346_->cvalue;
34930 _tmp348_ = type;
34931 _tmp349_ = bala_ccode_base_module_get_implicit_cast_expression (self, _tmp347_, _tmp348_, target_type, node);
34932 _bala_ccode_node_unref0 (_tmp345_->cvalue)((_tmp345_->cvalue == ((void*)0)) ? ((void*)0) : (_tmp345_
->cvalue = (bala_ccode_node_unref (_tmp345_->cvalue), (
(void*)0))))
;
34933 _tmp345_->cvalue = _tmp349_;
34934 _tmp351_ = _result_;
34935 if (_tmp351_->lvalue) {
34936 BalaGLibValue* _tmp352_;
34937 BalaCCodeExpression* _tmp353_;
34938 BalaCCodeExpression* _tmp354_;
34939 _tmp352_ = _result_;
34940 _tmp353_ = _tmp352_->cvalue;
34941 _tmp354_ = old_cexpr;
34942 _tmp350_ = _tmp353_ == _tmp354_;
34943 } else {
34944 _tmp350_ = FALSE(0);
34945 }
34946 _tmp355_ = _result_;
34947 _tmp355_->lvalue = _tmp350_;
34948 _bala_ccode_node_unref0 (old_cexpr)((old_cexpr == ((void*)0)) ? ((void*)0) : (old_cexpr = (bala_ccode_node_unref
(old_cexpr), ((void*)0))))
;
34949 }
34950 }
34951 }
34952 }
34953 array_needs_copy = FALSE(0);
34954 _tmp357_ = type;
34955 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp357_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp357_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
34956 _tmp356_ = G_TYPE_CHECK_INSTANCE_TYPE (target_type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
target_type); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
34957 } else {
34958 _tmp356_ = FALSE(0);
34959 }
34960 if (_tmp356_) {
34961 BalaArrayType* array = NULL((void*)0);
34962 BalaDataType* _tmp358_;
34963 BalaArrayType* _tmp359_;
34964 BalaArrayType* target_array = NULL((void*)0);
34965 BalaArrayType* _tmp360_;
34966 gboolean _tmp361_ = FALSE(0);
34967 BalaArrayType* _tmp362_;
34968 BalaDataType* _tmp363_;
34969 BalaDataType* _tmp364_;
34970 gboolean _tmp365_;
34971 gboolean _tmp366_;
34972 _tmp358_ = type;
34973 _tmp359_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp358_, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp358_), ((bala_array_type_get_type ())))))
);
34974 array = _tmp359_;
34975 _tmp360_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (target_type, BALA_TYPE_ARRAY_TYPE, BalaArrayType)(((BalaArrayType*) g_type_check_instance_cast ((GTypeInstance
*) (target_type), ((bala_array_type_get_type ())))))
);
34976 target_array = _tmp360_;
34977 _tmp362_ = target_array;
34978 _tmp363_ = bala_array_type_get_element_type (_tmp362_);
34979 _tmp364_ = _tmp363_;
34980 _tmp365_ = bala_data_type_get_value_owned (_tmp364_);
34981 _tmp366_ = _tmp365_;
34982 if (_tmp366_) {
34983 BalaArrayType* _tmp367_;
34984 BalaDataType* _tmp368_;
34985 BalaDataType* _tmp369_;
34986 gboolean _tmp370_;
34987 gboolean _tmp371_;
34988 _tmp367_ = array;
34989 _tmp368_ = bala_array_type_get_element_type (_tmp367_);
34990 _tmp369_ = _tmp368_;
34991 _tmp370_ = bala_data_type_get_value_owned (_tmp369_);
34992 _tmp371_ = _tmp370_;
34993 _tmp361_ = !_tmp371_;
34994 } else {
34995 _tmp361_ = FALSE(0);
34996 }
34997 if (_tmp361_) {
34998 BalaArrayType* _tmp372_;
34999 BalaDataType* _tmp373_;
35000 BalaDataType* _tmp374_;
35001 _tmp372_ = target_array;
35002 _tmp373_ = bala_array_type_get_element_type (_tmp372_);
35003 _tmp374_ = _tmp373_;
35004 array_needs_copy = bala_ccode_base_module_requires_copy (_tmp374_);
35005 }
35006 _bala_code_node_unref0 (target_array)((target_array == ((void*)0)) ? ((void*)0) : (target_array = (
bala_code_node_unref (target_array), ((void*)0))))
;
35007 _bala_code_node_unref0 (array)((array == ((void*)0)) ? ((void*)0) : (array = (bala_code_node_unref
(array), ((void*)0))))
;
35008 }
35009 if (!gvalue_boxing) {
35010 _tmp379_ = !gvariant_boxing;
35011 } else {
35012 _tmp379_ = FALSE(0);
35013 }
35014 if (_tmp379_) {
35015 gboolean _tmp380_;
35016 gboolean _tmp381_;
35017 _tmp380_ = bala_data_type_get_value_owned (target_type);
35018 _tmp381_ = _tmp380_;
35019 _tmp378_ = _tmp381_;
35020 } else {
35021 _tmp378_ = FALSE(0);
35022 }
35023 if (_tmp378_) {
35024 gboolean _tmp382_ = FALSE(0);
35025 gboolean _tmp383_ = FALSE(0);
35026 gboolean _tmp384_ = FALSE(0);
35027 BalaDataType* _tmp385_;
35028 gboolean _tmp386_;
35029 gboolean _tmp387_;
35030 _tmp385_ = type;
35031 _tmp386_ = bala_data_type_get_value_owned (_tmp385_);
35032 _tmp387_ = _tmp386_;
35033 if (!_tmp387_) {
35034 _tmp384_ = TRUE(!(0));
35035 } else {
35036 _tmp384_ = boxing;
35037 }
35038 if (_tmp384_) {
35039 _tmp383_ = TRUE(!(0));
35040 } else {
35041 _tmp383_ = unboxing;
35042 }
35043 if (_tmp383_) {
35044 _tmp382_ = TRUE(!(0));
35045 } else {
35046 _tmp382_ = array_needs_copy;
35047 }
35048 _tmp377_ = _tmp382_;
35049 } else {
35050 _tmp377_ = FALSE(0);
35051 }
35052 if (_tmp377_) {
35053 _tmp376_ = bala_ccode_base_module_requires_copy (target_type);
35054 } else {
35055 _tmp376_ = FALSE(0);
35056 }
35057 if (_tmp376_) {
35058 BalaDataType* _tmp388_;
35059 _tmp388_ = type;
35060 _tmp375_ = !G_TYPE_CHECK_INSTANCE_TYPE (_tmp388_, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp388_); GType __t = ((bala_null_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
35061 } else {
35062 _tmp375_ = FALSE(0);
35063 }
35064 if (_tmp375_) {
35065 BalaGLibValue* copy = NULL((void*)0);
35066 BalaGLibValue* _tmp389_;
35067 BalaTargetValue* _tmp390_;
35068 gboolean _tmp391_ = FALSE(0);
35069 BalaTypeSymbol* _tmp392_;
35070 BalaTypeSymbol* _tmp393_;
35071 gboolean _tmp403_ = FALSE(0);
35072 BalaGLibValue* _tmp414_;
35073 BalaGLibValue* _tmp415_;
35074 BalaPropertyAccessor* prop_acc = NULL((void*)0);
35075 BalaPropertyAccessor* _tmp416_;
35076 gboolean _tmp417_ = FALSE(0);
35077 gboolean _tmp418_ = FALSE(0);
35078 BalaPropertyAccessor* _tmp419_;
35079 _tmp389_ = _result_;
35080 _tmp390_ = bala_ccode_base_module_copy_value (self, (BalaTargetValue*) _tmp389_, node);
35081 copy = G_TYPE_CHECK_INSTANCE_CAST (_tmp390_, BALA_TYPE_GLIB_VALUE, BalaGLibValue)(((BalaGLibValue*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp390_), ((bala_glib_value_get_type ())))))
;
35082 _tmp392_ = bala_data_type_get_type_symbol (target_type);
35083 _tmp393_ = _tmp392_;
35084 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp393_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp393_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35085 BalaGLibValue* _tmp394_;
35086 _tmp394_ = copy;
35087 _tmp391_ = _tmp394_ == NULL((void*)0);
35088 } else {
35089 _tmp391_ = FALSE(0);
35090 }
35091 if (_tmp391_) {
35092 BalaSourceReference* _tmp395_;
35093 BalaSourceReference* _tmp396_;
35094 BalaTypeSymbol* _tmp397_;
35095 BalaTypeSymbol* _tmp398_;
35096 gchar* _tmp399_;
35097 gchar* _tmp400_;
35098 gchar* _tmp401_;
35099 gchar* _tmp402_;
35100 _tmp395_ = bala_code_node_get_source_reference (node);
35101 _tmp396_ = _tmp395_;
35102 _tmp397_ = bala_data_type_get_type_symbol (target_type);
35103 _tmp398_ = _tmp397_;
35104 _tmp399_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp398_);
35105 _tmp400_ = _tmp399_;
35106 _tmp401_ = g_strdup_printf ("missing class prerequisite for interface `%s', add GLib.Object to inte" \
35107"rface declaration if unsure", _tmp400_);
35108 _tmp402_ = _tmp401_;
35109 bala_report_error (_tmp396_, _tmp402_);
35110 _g_free0 (_tmp402_)(_tmp402_ = (g_free (_tmp402_), ((void*)0)));
35111 _g_free0 (_tmp400_)(_tmp400_ = (g_free (_tmp400_), ((void*)0)));
35112 result = (BalaTargetValue*) _result_;
35113 _bala_target_value_unref0 (copy)((copy == ((void*)0)) ? ((void*)0) : (copy = (bala_target_value_unref
(copy), ((void*)0))))
;
35114 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
35115 return result;
35116 }
35117 if (array_needs_copy) {
35118 BalaDataType* _tmp404_;
35119 _tmp404_ = type;
35120 _tmp403_ = bala_ccode_base_module_requires_destroy (_tmp404_);
35121 } else {
35122 _tmp403_ = FALSE(0);
35123 }
35124 if (_tmp403_) {
35125 BalaGLibValue* _tmp405_;
35126 BalaDataType* _tmp406_;
35127 BalaDataType* _tmp407_;
35128 BalaDataType* _tmp408_;
35129 BalaCCodeFunction* _tmp409_;
35130 BalaCCodeFunction* _tmp410_;
35131 BalaGLibValue* _tmp411_;
35132 BalaCCodeExpression* _tmp412_;
35133 BalaCCodeExpression* _tmp413_;
35134 _tmp405_ = _result_;
35135 _tmp406_ = type;
35136 _tmp407_ = bala_data_type_copy (_tmp406_);
35137 _tmp408_ = _tmp407_;
35138 bala_target_value_set_value_type ((BalaTargetValue*) _tmp405_, _tmp408_);
35139 _bala_code_node_unref0 (_tmp408_)((_tmp408_ == ((void*)0)) ? ((void*)0) : (_tmp408_ = (bala_code_node_unref
(_tmp408_), ((void*)0))))
;
35140 _tmp409_ = bala_ccode_base_module_get_ccode (self);
35141 _tmp410_ = _tmp409_;
35142 _tmp411_ = _result_;
35143 _tmp412_ = bala_ccode_base_module_destroy_value (self, (BalaTargetValue*) _tmp411_, FALSE(0));
35144 _tmp413_ = _tmp412_;
35145 bala_ccode_function_add_expression (_tmp410_, _tmp413_);
35146 _bala_ccode_node_unref0 (_tmp413_)((_tmp413_ == ((void*)0)) ? ((void*)0) : (_tmp413_ = (bala_ccode_node_unref
(_tmp413_), ((void*)0))))
;
35147 }
35148 _tmp414_ = copy;
35149 _tmp415_ = _bala_target_value_ref0 (_tmp414_);
35150 _bala_target_value_unref0 (_result_)((_result_ == ((void*)0)) ? ((void*)0) : (_result_ = (bala_target_value_unref
(_result_), ((void*)0))))
;
35151 _result_ = _tmp415_;
35152 _tmp416_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (node, BALA_TYPE_PROPERTY_ACCESSOR)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
node); GType __t = ((bala_property_accessor_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaPropertyAccessor*) node) : NULL((void*)0));
35153 prop_acc = _tmp416_;
35154 _tmp419_ = prop_acc;
35155 if (_tmp419_ != NULL((void*)0)) {
35156 BalaPropertyAccessor* _tmp420_;
35157 gboolean _tmp421_;
35158 gboolean _tmp422_;
35159 _tmp420_ = prop_acc;
35160 _tmp421_ = bala_property_accessor_get_automatic_body (_tmp420_);
35161 _tmp422_ = _tmp421_;
35162 _tmp418_ = !_tmp422_;
35163 } else {
35164 _tmp418_ = FALSE(0);
35165 }
35166 if (_tmp418_) {
35167 BalaGLibValue* _tmp423_;
35168 BalaDataType* _tmp424_;
35169 BalaDataType* _tmp425_;
35170 _tmp423_ = _result_;
35171 _tmp424_ = bala_target_value_get_value_type ((BalaTargetValue*) _tmp423_);
35172 _tmp425_ = _tmp424_;
35173 _tmp417_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp425_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp425_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
35174 } else {
35175 _tmp417_ = FALSE(0);
35176 }
35177 if (_tmp417_) {
35178 BalaSourceReference* _tmp426_;
35179 BalaSourceReference* _tmp427_;
35180 _tmp426_ = bala_code_node_get_source_reference (node);
35181 _tmp427_ = _tmp426_;
35182 bala_report_deprecated (_tmp427_, "implicit copy of array is deprecated, explicitly invoke the copy metho" \
35183"d instead");
35184 }
35185 _bala_code_node_unref0 (prop_acc)((prop_acc == ((void*)0)) ? ((void*)0) : (prop_acc = (bala_code_node_unref
(prop_acc), ((void*)0))))
;
35186 _bala_target_value_unref0 (copy)((copy == ((void*)0)) ? ((void*)0) : (copy = (bala_target_value_unref
(copy), ((void*)0))))
;
35187 }
35188 result = (BalaTargetValue*) _result_;
35189 _bala_code_node_unref0 (type)((type == ((void*)0)) ? ((void*)0) : (type = (bala_code_node_unref
(type), ((void*)0))))
;
35190 return result;
35191}
35192
35193static BalaCCodeExpression*
35194bala_ccode_base_module_real_get_implicit_cast_expression (BalaCCodeBaseModule* self,
35195 BalaCCodeExpression* source_cexpr,
35196 BalaDataType* expression_type,
35197 BalaDataType* target_type,
35198 BalaCodeNode* node)
35199{
35200 BalaCCodeExpression* cexpr = NULL((void*)0);
35201 BalaCCodeExpression* _tmp0_;
35202 gboolean _tmp1_ = FALSE(0);
35203 BalaTypeSymbol* _tmp2_;
35204 BalaTypeSymbol* _tmp3_;
35205 BalaCCodeFile* _tmp8_;
35206 BalaClass* cl = NULL((void*)0);
35207 BalaTypeSymbol* _tmp9_;
35208 BalaTypeSymbol* _tmp10_;
35209 BalaInterface* iface = NULL((void*)0);
35210 BalaTypeSymbol* _tmp11_;
35211 BalaTypeSymbol* _tmp12_;
35212 gboolean _tmp13_ = FALSE(0);
35213 BalaCodeContext* _tmp14_;
35214 gboolean _tmp15_;
35215 gboolean _tmp16_;
35216 BalaCCodeExpression* result = NULL((void*)0);
35217 g_return_val_if_fail (source_cexpr != NULL, NULL)do { if ((source_cexpr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "source_cexpr != NULL"
); return (((void*)0)); } } while (0)
;
35218 _tmp0_ = _bala_ccode_node_ref0 (source_cexpr);
35219 cexpr = _tmp0_;
35220 _tmp2_ = bala_data_type_get_type_symbol (expression_type);
35221 _tmp3_ = _tmp2_;
35222 if (_tmp3_ != NULL((void*)0)) {
35223 BalaTypeSymbol* _tmp4_;
35224 BalaTypeSymbol* _tmp5_;
35225 BalaTypeSymbol* _tmp6_;
35226 BalaTypeSymbol* _tmp7_;
35227 _tmp4_ = bala_data_type_get_type_symbol (expression_type);
35228 _tmp5_ = _tmp4_;
35229 _tmp6_ = bala_data_type_get_type_symbol (target_type);
35230 _tmp7_ = _tmp6_;
35231 _tmp1_ = _tmp5_ == _tmp7_;
35232 } else {
35233 _tmp1_ = FALSE(0);
35234 }
35235 if (_tmp1_) {
35236 result = cexpr;
35237 return result;
35238 }
35239 if (G_TYPE_CHECK_INSTANCE_TYPE (expression_type, BALA_TYPE_NULL_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
expression_type); GType __t = ((bala_null_type_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
) {
35240 result = cexpr;
35241 return result;
35242 }
35243 _tmp8_ = self->cfile;
35244 bala_ccode_base_module_generate_type_declaration (self, target_type, _tmp8_);
35245 _tmp9_ = bala_data_type_get_type_symbol (target_type);
35246 _tmp10_ = _tmp9_;
35247 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp10_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp10_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp10_) : NULL((void*)0);
35248 _tmp11_ = bala_data_type_get_type_symbol (target_type);
35249 _tmp12_ = _tmp11_;
35250 iface = G_TYPE_CHECK_INSTANCE_TYPE (_tmp12_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp12_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaInterface*) _tmp12_) : NULL((void*)0);
35251 _tmp14_ = self->priv->_context;
35252 _tmp15_ = bala_code_context_get_checking (_tmp14_);
35253 _tmp16_ = _tmp15_;
35254 if (_tmp16_) {
35255 gboolean _tmp17_ = FALSE(0);
35256 BalaInterface* _tmp18_;
35257 _tmp18_ = iface;
35258 if (_tmp18_ != NULL((void*)0)) {
35259 _tmp17_ = TRUE(!(0));
35260 } else {
35261 gboolean _tmp19_ = FALSE(0);
35262 BalaClass* _tmp20_;
35263 _tmp20_ = cl;
35264 if (_tmp20_ != NULL((void*)0)) {
35265 BalaClass* _tmp21_;
35266 gboolean _tmp22_;
35267 gboolean _tmp23_;
35268 _tmp21_ = cl;
35269 _tmp22_ = bala_class_get_is_compact (_tmp21_);
35270 _tmp23_ = _tmp22_;
35271 _tmp19_ = !_tmp23_;
35272 } else {
35273 _tmp19_ = FALSE(0);
35274 }
35275 _tmp17_ = _tmp19_;
35276 }
35277 _tmp13_ = _tmp17_;
35278 } else {
35279 _tmp13_ = FALSE(0);
35280 }
35281 if (_tmp13_) {
35282 BalaCCodeExpression* _tmp24_;
35283 BalaTypeSymbol* _tmp25_;
35284 BalaTypeSymbol* _tmp26_;
35285 BalaCCodeFunctionCall* _tmp27_;
35286 _tmp24_ = cexpr;
35287 _tmp25_ = bala_data_type_get_type_symbol (target_type);
35288 _tmp26_ = _tmp25_;
35289 _tmp27_ = bala_ccode_base_module_generate_instance_cast (self, _tmp24_, _tmp26_);
35290 result = (BalaCCodeExpression*) _tmp27_;
35291 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35292 return result;
35293 } else {
35294 gboolean _tmp28_ = FALSE(0);
35295 BalaTypeSymbol* _tmp29_;
35296 BalaTypeSymbol* _tmp30_;
35297 _tmp29_ = bala_data_type_get_type_symbol (target_type);
35298 _tmp30_ = _tmp29_;
35299 if (_tmp30_ != NULL((void*)0)) {
35300 gchar* _tmp31_;
35301 gchar* _tmp32_;
35302 gchar* _tmp33_;
35303 gchar* _tmp34_;
35304 _tmp31_ = bala_get_ccode_name ((BalaCodeNode*) expression_type);
35305 _tmp32_ = _tmp31_;
35306 _tmp33_ = bala_get_ccode_name ((BalaCodeNode*) target_type);
35307 _tmp34_ = _tmp33_;
35308 _tmp28_ = g_strcmp0 (_tmp32_, _tmp34_) != 0;
35309 _g_free0 (_tmp34_)(_tmp34_ = (g_free (_tmp34_), ((void*)0)));
35310 _g_free0 (_tmp32_)(_tmp32_ = (g_free (_tmp32_), ((void*)0)));
35311 } else {
35312 _tmp28_ = FALSE(0);
35313 }
35314 if (_tmp28_) {
35315 BalaStruct* st = NULL((void*)0);
35316 BalaTypeSymbol* _tmp35_;
35317 BalaTypeSymbol* _tmp36_;
35318 gboolean _tmp37_ = FALSE(0);
35319 BalaTypeSymbol* _tmp38_;
35320 BalaTypeSymbol* _tmp39_;
35321 _tmp35_ = bala_data_type_get_type_symbol (target_type);
35322 _tmp36_ = _tmp35_;
35323 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp36_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp36_) : NULL((void*)0);
35324 _tmp38_ = bala_data_type_get_type_symbol (target_type);
35325 _tmp39_ = _tmp38_;
35326 if (bala_typesymbol_is_reference_type (_tmp39_)) {
35327 _tmp37_ = TRUE(!(0));
35328 } else {
35329 gboolean _tmp40_ = FALSE(0);
35330 BalaStruct* _tmp41_;
35331 _tmp41_ = st;
35332 if (_tmp41_ != NULL((void*)0)) {
35333 BalaStruct* _tmp42_;
35334 _tmp42_ = st;
35335 _tmp40_ = bala_struct_is_simple_type (_tmp42_);
35336 } else {
35337 _tmp40_ = FALSE(0);
35338 }
35339 _tmp37_ = _tmp40_;
35340 }
35341 if (_tmp37_) {
35342 BalaCCodeExpression* _tmp43_;
35343 gchar* _tmp44_;
35344 gchar* _tmp45_;
35345 BalaCCodeCastExpression* _tmp46_;
35346 BalaCCodeExpression* _tmp47_;
35347 _tmp43_ = cexpr;
35348 _tmp44_ = bala_get_ccode_name ((BalaCodeNode*) target_type);
35349 _tmp45_ = _tmp44_;
35350 _tmp46_ = bala_ccode_cast_expression_new (_tmp43_, _tmp45_);
35351 _tmp47_ = (BalaCCodeExpression*) _tmp46_;
35352 _g_free0 (_tmp45_)(_tmp45_ = (g_free (_tmp45_), ((void*)0)));
35353 result = _tmp47_;
35354 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35355 return result;
35356 } else {
35357 result = cexpr;
35358 return result;
35359 }
35360 } else {
35361 result = cexpr;
35362 return result;
35363 }
35364 }
35365 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35366}
35367
35368BalaCCodeExpression*
35369bala_ccode_base_module_get_implicit_cast_expression (BalaCCodeBaseModule* self,
35370 BalaCCodeExpression* source_cexpr,
35371 BalaDataType* expression_type,
35372 BalaDataType* target_type,
35373 BalaCodeNode* node)
35374{
35375 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
35376 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_implicit_cast_expression (self, source_cexpr, expression_type, target_type, node);
35377}
35378
35379void
35380bala_ccode_base_module_store_property (BalaCCodeBaseModule* self,
35381 BalaProperty* prop,
35382 BalaExpression* instance,
35383 BalaTargetValue* value)
35384{
35385 BalaProperty* base_prop = NULL((void*)0);
35386 BalaProperty* _tmp0_;
35387 BalaProperty* _tmp1_;
35388 gboolean _tmp8_ = FALSE(0);
35389 gchar* set_func = NULL((void*)0);
35390 gchar* _tmp83_;
35391 BalaCCodeFunctionCall* ccall = NULL((void*)0);
35392 const gchar* _tmp98_;
35393 BalaCCodeIdentifier* _tmp99_;
35394 BalaCCodeIdentifier* _tmp100_;
35395 BalaCCodeFunctionCall* _tmp101_;
35396 BalaCCodeFunctionCall* _tmp102_;
35397 BalaMemberBinding _tmp103_;
35398 BalaMemberBinding _tmp104_;
35399 BalaCCodeExpression* cexpr = NULL((void*)0);
35400 BalaCCodeExpression* _tmp125_;
35401 BalaCCodeExpression* _tmp126_;
35402 BalaDataType* _tmp127_;
35403 BalaDataType* _tmp128_;
35404 BalaArrayType* array_type = NULL((void*)0);
35405 BalaDataType* _tmp138_;
35406 BalaDataType* _tmp139_;
35407 BalaArrayType* _tmp140_;
35408 BalaCCodeFunctionCall* _tmp141_;
35409 BalaCCodeExpression* _tmp142_;
35410 gboolean _tmp143_ = FALSE(0);
35411 BalaArrayType* _tmp144_;
35412 BalaCCodeFunction* _tmp180_;
35413 BalaCCodeFunction* _tmp181_;
35414 BalaCCodeFunctionCall* _tmp182_;
35415 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
35416 g_return_if_fail (prop != NULL)do { if ((prop != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "prop != NULL"
); return; } } while (0)
;
35417 g_return_if_fail (value != NULL)do { if ((value != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value != NULL"
); return; } } while (0)
;
35418 base_prop = prop;
35419 _tmp0_ = bala_property_get_base_property (prop);
35420 _tmp1_ = _tmp0_;
35421 if (_tmp1_ != NULL((void*)0)) {
35422 BalaProperty* _tmp2_;
35423 BalaProperty* _tmp3_;
35424 _tmp2_ = bala_property_get_base_property (prop);
35425 _tmp3_ = _tmp2_;
35426 base_prop = _tmp3_;
35427 } else {
35428 BalaProperty* _tmp4_;
35429 BalaProperty* _tmp5_;
35430 _tmp4_ = bala_property_get_base_interface_property (prop);
35431 _tmp5_ = _tmp4_;
35432 if (_tmp5_ != NULL((void*)0)) {
35433 BalaProperty* _tmp6_;
35434 BalaProperty* _tmp7_;
35435 _tmp6_ = bala_property_get_base_interface_property (prop);
35436 _tmp7_ = _tmp6_;
35437 base_prop = _tmp7_;
35438 }
35439 }
35440 if (G_TYPE_CHECK_INSTANCE_TYPE (instance, BALA_TYPE_BASE_ACCESS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
instance); GType __t = ((bala_base_access_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35441 gboolean _tmp9_ = FALSE(0);
35442 BalaProperty* _tmp10_;
35443 gboolean _tmp11_;
35444 gboolean _tmp12_;
35445 _tmp10_ = base_prop;
35446 _tmp11_ = bala_property_get_is_abstract (_tmp10_);
35447 _tmp12_ = _tmp11_;
35448 if (_tmp12_) {
35449 _tmp9_ = TRUE(!(0));
35450 } else {
35451 BalaProperty* _tmp13_;
35452 gboolean _tmp14_;
35453 gboolean _tmp15_;
35454 _tmp13_ = base_prop;
35455 _tmp14_ = bala_property_get_is_virtual (_tmp13_);
35456 _tmp15_ = _tmp14_;
35457 _tmp9_ = _tmp15_;
35458 }
35459 _tmp8_ = _tmp9_;
35460 } else {
35461 _tmp8_ = FALSE(0);
35462 }
35463 if (_tmp8_) {
35464 BalaCCodeExpression* vcast = NULL((void*)0);
35465 BalaProperty* _tmp16_;
35466 BalaSymbol* _tmp17_;
35467 BalaSymbol* _tmp18_;
35468 BalaCCodeExpression* _tmp45_;
35469 vcast = NULL((void*)0);
35470 _tmp16_ = base_prop;
35471 _tmp17_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp16_);
35472 _tmp18_ = _tmp17_;
35473 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp18_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp18_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35474 BalaClass* base_class = NULL((void*)0);
35475 BalaProperty* _tmp19_;
35476 BalaSymbol* _tmp20_;
35477 BalaSymbol* _tmp21_;
35478 BalaClass* _tmp22_;
35479 gchar* _tmp23_;
35480 gchar* _tmp24_;
35481 BalaCCodeIdentifier* _tmp25_;
35482 BalaCCodeIdentifier* _tmp26_;
35483 BalaCCodeFunctionCall* _tmp27_;
35484 BalaCCodeExpression* _tmp28_;
35485 BalaClass* _tmp29_;
35486 BalaClass* _tmp30_;
35487 gchar* _tmp31_;
35488 gchar* _tmp32_;
35489 gchar* _tmp33_;
35490 gchar* _tmp34_;
35491 BalaCCodeIdentifier* _tmp35_;
35492 BalaCCodeIdentifier* _tmp36_;
35493 _tmp19_ = base_prop;
35494 _tmp20_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp19_);
35495 _tmp21_ = _tmp20_;
35496 base_class = G_TYPE_CHECK_INSTANCE_CAST (_tmp21_, BALA_TYPE_CLASS, BalaClass)(((BalaClass*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp21_), ((bala_class_get_type ())))))
;
35497 _tmp22_ = base_class;
35498 _tmp23_ = bala_get_ccode_class_type_function (_tmp22_);
35499 _tmp24_ = _tmp23_;
35500 _tmp25_ = bala_ccode_identifier_new (_tmp24_);
35501 _tmp26_ = _tmp25_;
35502 _tmp27_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp26_);
35503 _bala_ccode_node_unref0 (vcast)((vcast == ((void*)0)) ? ((void*)0) : (vcast = (bala_ccode_node_unref
(vcast), ((void*)0))))
;
35504 vcast = (BalaCCodeExpression*) _tmp27_;
35505 _bala_ccode_node_unref0 (_tmp26_)((_tmp26_ == ((void*)0)) ? ((void*)0) : (_tmp26_ = (bala_ccode_node_unref
(_tmp26_), ((void*)0))))
;
35506 _g_free0 (_tmp24_)(_tmp24_ = (g_free (_tmp24_), ((void*)0)));
35507 _tmp28_ = vcast;
35508 _tmp29_ = bala_ccode_base_module_get_current_class (self);
35509 _tmp30_ = _tmp29_;
35510 _tmp31_ = bala_get_ccode_lower_case_name ((BalaCodeNode*) _tmp30_, NULL((void*)0));
35511 _tmp32_ = _tmp31_;
35512 _tmp33_ = g_strdup_printf ("%s_parent_class", _tmp32_);
35513 _tmp34_ = _tmp33_;
35514 _tmp35_ = bala_ccode_identifier_new (_tmp34_);
35515 _tmp36_ = _tmp35_;
35516 bala_ccode_function_call_add_argument (G_TYPE_CHECK_INSTANCE_CAST (_tmp28_, BALA_TYPE_CCODE_FUNCTION_CALL, BalaCCodeFunctionCall)(((BalaCCodeFunctionCall*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp28_), ((bala_ccode_function_call_get_type ())))))
, (BalaCCodeExpression*) _tmp36_);
35517 _bala_ccode_node_unref0 (_tmp36_)((_tmp36_ == ((void*)0)) ? ((void*)0) : (_tmp36_ = (bala_ccode_node_unref
(_tmp36_), ((void*)0))))
;
35518 _g_free0 (_tmp34_)(_tmp34_ = (g_free (_tmp34_), ((void*)0)));
35519 _g_free0 (_tmp32_)(_tmp32_ = (g_free (_tmp32_), ((void*)0)));
35520 } else {
35521 BalaProperty* _tmp37_;
35522 BalaSymbol* _tmp38_;
35523 BalaSymbol* _tmp39_;
35524 _tmp37_ = base_prop;
35525 _tmp38_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp37_);
35526 _tmp39_ = _tmp38_;
35527 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp39_, BALA_TYPE_INTERFACE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp39_); GType __t = ((bala_interface_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35528 BalaInterface* base_iface = NULL((void*)0);
35529 BalaProperty* _tmp40_;
35530 BalaSymbol* _tmp41_;
35531 BalaSymbol* _tmp42_;
35532 BalaInterface* _tmp43_;
35533 BalaCCodeExpression* _tmp44_;
35534 _tmp40_ = base_prop;
35535 _tmp41_ = bala_symbol_get_parent_symbol ((BalaSymbol*) _tmp40_);
35536 _tmp42_ = _tmp41_;
35537 base_iface = G_TYPE_CHECK_INSTANCE_CAST (_tmp42_, BALA_TYPE_INTERFACE, BalaInterface)(((BalaInterface*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp42_), ((bala_interface_get_type ())))))
;
35538 _tmp43_ = base_iface;
35539 _tmp44_ = bala_ccode_base_module_get_this_interface_cexpression (self, _tmp43_);
35540 _bala_ccode_node_unref0 (vcast)((vcast == ((void*)0)) ? ((void*)0) : (vcast = (bala_ccode_node_unref
(vcast), ((void*)0))))
;
35541 vcast = _tmp44_;
35542 }
35543 }
35544 _tmp45_ = vcast;
35545 if (_tmp45_ != NULL((void*)0)) {
35546 BalaCCodeFunctionCall* ccall = NULL((void*)0);
35547 BalaCCodeExpression* _tmp46_;
35548 const gchar* _tmp47_;
35549 const gchar* _tmp48_;
35550 gchar* _tmp49_;
35551 gchar* _tmp50_;
35552 BalaCCodeMemberAccess* _tmp51_;
35553 BalaCCodeMemberAccess* _tmp52_;
35554 BalaCCodeFunctionCall* _tmp53_;
35555 BalaCCodeFunctionCall* _tmp54_;
35556 BalaCCodeFunctionCall* _tmp55_;
35557 BalaCCodeExpression* _tmp56_;
35558 BalaCCodeExpression* _tmp57_;
35559 BalaCCodeExpression* cexpr = NULL((void*)0);
35560 BalaCCodeExpression* _tmp58_;
35561 BalaCCodeExpression* _tmp59_;
35562 BalaDataType* _tmp60_;
35563 BalaDataType* _tmp61_;
35564 BalaCCodeFunctionCall* _tmp71_;
35565 BalaCCodeExpression* _tmp72_;
35566 BalaCCodeFunction* _tmp73_;
35567 BalaCCodeFunction* _tmp74_;
35568 BalaCCodeFunctionCall* _tmp75_;
35569 _tmp46_ = vcast;
35570 _tmp47_ = bala_symbol_get_name ((BalaSymbol*) prop);
35571 _tmp48_ = _tmp47_;
35572 _tmp49_ = g_strdup_printf ("set_%s", _tmp48_);
35573 _tmp50_ = _tmp49_;
35574 _tmp51_ = bala_ccode_member_access_new_pointer (_tmp46_, _tmp50_);
35575 _tmp52_ = _tmp51_;
35576 _tmp53_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp52_);
35577 _tmp54_ = _tmp53_;
35578 _bala_ccode_node_unref0 (_tmp52_)((_tmp52_ == ((void*)0)) ? ((void*)0) : (_tmp52_ = (bala_ccode_node_unref
(_tmp52_), ((void*)0))))
;
35579 _g_free0 (_tmp50_)(_tmp50_ = (g_free (_tmp50_), ((void*)0)));
35580 ccall = _tmp54_;
35581 _tmp55_ = ccall;
35582 _tmp56_ = bala_ccode_base_module_get_ccodenode (self, instance);
35583 _tmp57_ = G_TYPE_CHECK_INSTANCE_CAST (_tmp56_, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp56_), ((bala_ccode_expression_get_type ())))))
;
35584 bala_ccode_function_call_add_argument (_tmp55_, _tmp57_);
35585 _bala_ccode_node_unref0 (_tmp57_)((_tmp57_ == ((void*)0)) ? ((void*)0) : (_tmp57_ = (bala_ccode_node_unref
(_tmp57_), ((void*)0))))
;
35586 _tmp58_ = bala_get_cvalue_ (value);
35587 _tmp59_ = _bala_ccode_node_ref0 (_tmp58_);
35588 cexpr = _tmp59_;
35589 _tmp60_ = bala_property_get_property_type (prop);
35590 _tmp61_ = _tmp60_;
35591 if (bala_data_type_is_real_non_null_struct_type (_tmp61_)) {
35592 gboolean _tmp62_ = FALSE(0);
35593 BalaCCodeExpression* _tmp63_;
35594 BalaCCodeExpression* _tmp69_;
35595 BalaCCodeUnaryExpression* _tmp70_;
35596 _tmp63_ = cexpr;
35597 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp63_, BALA_TYPE_CCODE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp63_); GType __t = ((bala_ccode_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35598 _tmp62_ = TRUE(!(0));
35599 } else {
35600 BalaCCodeExpression* _tmp64_;
35601 _tmp64_ = cexpr;
35602 _tmp62_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp64_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp64_); GType __t = ((bala_ccode_identifier_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
35603 }
35604 if (!_tmp62_) {
35605 BalaTargetValue* temp_value = NULL((void*)0);
35606 BalaTargetValue* _tmp65_;
35607 BalaTargetValue* _tmp66_;
35608 BalaCCodeExpression* _tmp67_;
35609 BalaCCodeExpression* _tmp68_;
35610 _tmp65_ = bala_ccode_base_module_store_temp_value (self, value, (BalaCodeNode*) instance, NULL((void*)0));
35611 temp_value = _tmp65_;
35612 _tmp66_ = temp_value;
35613 _tmp67_ = bala_get_cvalue_ (_tmp66_);
35614 _tmp68_ = _bala_ccode_node_ref0 (_tmp67_);
35615 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35616 cexpr = _tmp68_;
35617 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
35618 }
35619 _tmp69_ = cexpr;
35620 _tmp70_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp69_);
35621 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35622 cexpr = (BalaCCodeExpression*) _tmp70_;
35623 }
35624 _tmp71_ = ccall;
35625 _tmp72_ = cexpr;
35626 bala_ccode_function_call_add_argument (_tmp71_, _tmp72_);
35627 _tmp73_ = bala_ccode_base_module_get_ccode (self);
35628 _tmp74_ = _tmp73_;
35629 _tmp75_ = ccall;
35630 bala_ccode_function_add_expression (_tmp74_, (BalaCCodeExpression*) _tmp75_);
35631 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35632 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
35633 } else {
35634 BalaSourceReference* _tmp76_;
35635 BalaSourceReference* _tmp77_;
35636 BalaProperty* _tmp78_;
35637 gchar* _tmp79_;
35638 gchar* _tmp80_;
35639 gchar* _tmp81_;
35640 gchar* _tmp82_;
35641 _tmp76_ = bala_code_node_get_source_reference ((BalaCodeNode*) instance);
35642 _tmp77_ = _tmp76_;
35643 _tmp78_ = base_prop;
35644 _tmp79_ = bala_symbol_get_full_name ((BalaSymbol*) _tmp78_);
35645 _tmp80_ = _tmp79_;
35646 _tmp81_ = g_strdup_printf ("internal: Invalid assignment to `%s'", _tmp80_);
35647 _tmp82_ = _tmp81_;
35648 bala_report_error (_tmp77_, _tmp82_);
35649 _g_free0 (_tmp82_)(_tmp82_ = (g_free (_tmp82_), ((void*)0)));
35650 _g_free0 (_tmp80_)(_tmp80_ = (g_free (_tmp80_), ((void*)0)));
35651 }
35652 _bala_ccode_node_unref0 (vcast)((vcast == ((void*)0)) ? ((void*)0) : (vcast = (bala_ccode_node_unref
(vcast), ((void*)0))))
;
35653 return;
35654 }
35655 _tmp83_ = g_strdup ("g_object_set");
35656 set_func = _tmp83_;
35657 if (!bala_get_ccode_no_accessor_method (prop)) {
35658 if (G_TYPE_CHECK_INSTANCE_TYPE (prop, BALA_TYPE_DYNAMIC_PROPERTY)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
prop); GType __t = ((bala_dynamic_property_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35659 gchar* _tmp84_;
35660 _tmp84_ = bala_ccode_base_module_get_dynamic_property_setter_cname (self, G_TYPE_CHECK_INSTANCE_CAST (prop, BALA_TYPE_DYNAMIC_PROPERTY, BalaDynamicProperty)(((BalaDynamicProperty*) g_type_check_instance_cast ((GTypeInstance
*) (prop), ((bala_dynamic_property_get_type ())))))
);
35661 _g_free0 (set_func)(set_func = (g_free (set_func), ((void*)0)));
35662 set_func = _tmp84_;
35663 } else {
35664 BalaProperty* _tmp85_;
35665 BalaPropertyAccessor* _tmp86_;
35666 BalaPropertyAccessor* _tmp87_;
35667 BalaCCodeFile* _tmp88_;
35668 BalaProperty* _tmp89_;
35669 BalaPropertyAccessor* _tmp90_;
35670 BalaPropertyAccessor* _tmp91_;
35671 gchar* _tmp92_;
35672 gboolean _tmp93_ = FALSE(0);
35673 gboolean _tmp94_;
35674 gboolean _tmp95_;
35675 _tmp85_ = base_prop;
35676 _tmp86_ = bala_property_get_set_accessor (_tmp85_);
35677 _tmp87_ = _tmp86_;
35678 _tmp88_ = self->cfile;
35679 bala_ccode_base_module_generate_property_accessor_declaration (self, _tmp87_, _tmp88_);
35680 _tmp89_ = base_prop;
35681 _tmp90_ = bala_property_get_set_accessor (_tmp89_);
35682 _tmp91_ = _tmp90_;
35683 _tmp92_ = bala_get_ccode_name ((BalaCodeNode*) _tmp91_);
35684 _g_free0 (set_func)(set_func = (g_free (set_func), ((void*)0)));
35685 set_func = _tmp92_;
35686 _tmp94_ = bala_symbol_get_external ((BalaSymbol*) prop);
35687 _tmp95_ = _tmp94_;
35688 if (!_tmp95_) {
35689 gboolean _tmp96_;
35690 gboolean _tmp97_;
35691 _tmp96_ = bala_symbol_get_external_package ((BalaSymbol*) prop);
35692 _tmp97_ = _tmp96_;
35693 _tmp93_ = _tmp97_;
35694 } else {
35695 _tmp93_ = FALSE(0);
35696 }
35697 if (_tmp93_) {
35698 if (bala_ccode_base_module_add_generated_external_symbol (self, (BalaSymbol*) prop)) {
35699 bala_code_visitor_visit_property ((BalaCodeVisitor*) self, prop);
35700 }
35701 }
35702 }
35703 }
35704 _tmp98_ = set_func;
35705 _tmp99_ = bala_ccode_identifier_new (_tmp98_);
35706 _tmp100_ = _tmp99_;
35707 _tmp101_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp100_);
35708 _tmp102_ = _tmp101_;
35709 _bala_ccode_node_unref0 (_tmp100_)((_tmp100_ == ((void*)0)) ? ((void*)0) : (_tmp100_ = (bala_ccode_node_unref
(_tmp100_), ((void*)0))))
;
35710 ccall = _tmp102_;
35711 _tmp103_ = bala_property_get_binding (prop);
35712 _tmp104_ = _tmp103_;
35713 if (_tmp104_ == BALA_MEMBER_BINDING_INSTANCE) {
35714 BalaCCodeExpression* cinstance = NULL((void*)0);
35715 BalaCCodeExpression* _tmp105_;
35716 gboolean _tmp106_ = FALSE(0);
35717 BalaSymbol* _tmp107_;
35718 BalaSymbol* _tmp108_;
35719 BalaCCodeFunctionCall* _tmp120_;
35720 BalaCCodeExpression* _tmp121_;
35721 _tmp105_ = bala_ccode_base_module_get_ccodenode (self, instance);
35722 cinstance = G_TYPE_CHECK_INSTANCE_CAST (_tmp105_, BALA_TYPE_CCODE_EXPRESSION, BalaCCodeExpression)(((BalaCCodeExpression*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp105_), ((bala_ccode_expression_get_type ())))))
;
35723 _tmp107_ = bala_symbol_get_parent_symbol ((BalaSymbol*) prop);
35724 _tmp108_ = _tmp107_;
35725 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp108_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp108_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35726 BalaSymbol* _tmp109_;
35727 BalaSymbol* _tmp110_;
35728 _tmp109_ = bala_symbol_get_parent_symbol ((BalaSymbol*) prop);
35729 _tmp110_ = _tmp109_;
35730 _tmp106_ = !bala_struct_is_simple_type (G_TYPE_CHECK_INSTANCE_CAST (_tmp110_, BALA_TYPE_STRUCT, BalaStruct)(((BalaStruct*) g_type_check_instance_cast ((GTypeInstance*) (
_tmp110_), ((bala_struct_get_type ())))))
);
35731 } else {
35732 _tmp106_ = FALSE(0);
35733 }
35734 if (_tmp106_) {
35735 BalaTargetValue* instance_value = NULL((void*)0);
35736 BalaTargetValue* _tmp111_;
35737 BalaTargetValue* _tmp112_;
35738 BalaTargetValue* _tmp113_;
35739 BalaTargetValue* _tmp114_;
35740 BalaTargetValue* _tmp117_;
35741 BalaCCodeExpression* _tmp118_;
35742 BalaCCodeUnaryExpression* _tmp119_;
35743 _tmp111_ = bala_expression_get_target_value (instance);
35744 _tmp112_ = _tmp111_;
35745 _tmp113_ = _bala_target_value_ref0 (_tmp112_);
35746 instance_value = _tmp113_;
35747 _tmp114_ = instance_value;
35748 if (!bala_get_lvalue (_tmp114_)) {
35749 BalaTargetValue* _tmp115_;
35750 BalaTargetValue* _tmp116_;
35751 _tmp115_ = instance_value;
35752 _tmp116_ = bala_ccode_base_module_store_temp_value (self, _tmp115_, (BalaCodeNode*) instance, NULL((void*)0));
35753 _bala_target_value_unref0 (instance_value)((instance_value == ((void*)0)) ? ((void*)0) : (instance_value
= (bala_target_value_unref (instance_value), ((void*)0))))
;
35754 instance_value = _tmp116_;
35755 }
35756 _tmp117_ = instance_value;
35757 _tmp118_ = bala_get_cvalue_ (_tmp117_);
35758 _tmp119_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp118_);
35759 _bala_ccode_node_unref0 (cinstance)((cinstance == ((void*)0)) ? ((void*)0) : (cinstance = (bala_ccode_node_unref
(cinstance), ((void*)0))))
;
35760 cinstance = (BalaCCodeExpression*) _tmp119_;
35761 _bala_target_value_unref0 (instance_value)((instance_value == ((void*)0)) ? ((void*)0) : (instance_value
= (bala_target_value_unref (instance_value), ((void*)0))))
;
35762 }
35763 _tmp120_ = ccall;
35764 _tmp121_ = cinstance;
35765 bala_ccode_function_call_add_argument (_tmp120_, _tmp121_);
35766 _bala_ccode_node_unref0 (cinstance)((cinstance == ((void*)0)) ? ((void*)0) : (cinstance = (bala_ccode_node_unref
(cinstance), ((void*)0))))
;
35767 }
35768 if (bala_get_ccode_no_accessor_method (prop)) {
35769 BalaCCodeFunctionCall* _tmp122_;
35770 BalaCCodeConstant* _tmp123_;
35771 BalaCCodeConstant* _tmp124_;
35772 _tmp122_ = ccall;
35773 _tmp123_ = bala_ccode_base_module_get_property_canonical_cconstant (self, prop);
35774 _tmp124_ = _tmp123_;
35775 bala_ccode_function_call_add_argument (_tmp122_, (BalaCCodeExpression*) _tmp124_);
35776 _bala_ccode_node_unref0 (_tmp124_)((_tmp124_ == ((void*)0)) ? ((void*)0) : (_tmp124_ = (bala_ccode_node_unref
(_tmp124_), ((void*)0))))
;
35777 }
35778 _tmp125_ = bala_get_cvalue_ (value);
35779 _tmp126_ = _bala_ccode_node_ref0 (_tmp125_);
35780 cexpr = _tmp126_;
35781 _tmp127_ = bala_property_get_property_type (prop);
35782 _tmp128_ = _tmp127_;
35783 if (bala_data_type_is_real_non_null_struct_type (_tmp128_)) {
35784 gboolean _tmp129_ = FALSE(0);
35785 BalaCCodeExpression* _tmp130_;
35786 BalaCCodeExpression* _tmp136_;
35787 BalaCCodeUnaryExpression* _tmp137_;
35788 _tmp130_ = cexpr;
35789 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp130_, BALA_TYPE_CCODE_CONSTANT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp130_); GType __t = ((bala_ccode_constant_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35790 _tmp129_ = TRUE(!(0));
35791 } else {
35792 BalaCCodeExpression* _tmp131_;
35793 _tmp131_ = cexpr;
35794 _tmp129_ = G_TYPE_CHECK_INSTANCE_TYPE (_tmp131_, BALA_TYPE_CCODE_IDENTIFIER)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp131_); GType __t = ((bala_ccode_identifier_get_type ()));
gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class
&& __inst->g_class->g_type == __t) __r = (!(0)
); else __r = g_type_check_instance_is_a (__inst, __t); __r; }
)))
;
35795 }
35796 if (!_tmp129_) {
35797 BalaTargetValue* temp_value = NULL((void*)0);
35798 BalaTargetValue* _tmp132_;
35799 BalaTargetValue* _tmp133_;
35800 BalaCCodeExpression* _tmp134_;
35801 BalaCCodeExpression* _tmp135_;
35802 _tmp132_ = bala_ccode_base_module_store_temp_value (self, value, (BalaCodeNode*) instance, NULL((void*)0));
35803 temp_value = _tmp132_;
35804 _tmp133_ = temp_value;
35805 _tmp134_ = bala_get_cvalue_ (_tmp133_);
35806 _tmp135_ = _bala_ccode_node_ref0 (_tmp134_);
35807 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35808 cexpr = _tmp135_;
35809 _bala_target_value_unref0 (temp_value)((temp_value == ((void*)0)) ? ((void*)0) : (temp_value = (bala_target_value_unref
(temp_value), ((void*)0))))
;
35810 }
35811 _tmp136_ = cexpr;
35812 _tmp137_ = bala_ccode_unary_expression_new (BALA_CCODE_UNARY_OPERATOR_ADDRESS_OF, _tmp136_);
35813 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35814 cexpr = (BalaCCodeExpression*) _tmp137_;
35815 }
35816 _tmp138_ = bala_property_get_property_type (prop);
35817 _tmp139_ = _tmp138_;
35818 _tmp140_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp139_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp139_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp139_) : NULL((void*)0));
35819 array_type = _tmp140_;
35820 _tmp141_ = ccall;
35821 _tmp142_ = cexpr;
35822 bala_ccode_function_call_add_argument (_tmp141_, _tmp142_);
35823 _tmp144_ = array_type;
35824 if (_tmp144_ != NULL((void*)0)) {
35825 _tmp143_ = bala_get_ccode_array_length ((BalaCodeNode*) prop);
35826 } else {
35827 _tmp143_ = FALSE(0);
35828 }
35829 if (_tmp143_) {
35830 {
35831 gint dim = 0;
35832 dim = 1;
35833 {
35834 gboolean _tmp145_ = FALSE(0);
35835 _tmp145_ = TRUE(!(0));
35836 while (TRUE(!(0))) {
35837 BalaArrayType* _tmp147_;
35838 gint _tmp148_;
35839 gint _tmp149_;
35840 BalaCCodeFunctionCall* _tmp150_;
35841 BalaCCodeExpression* _tmp151_;
35842 BalaCCodeExpression* _tmp152_;
35843 if (!_tmp145_) {
35844 gint _tmp146_;
35845 _tmp146_ = dim;
35846 dim = _tmp146_ + 1;
35847 }
35848 _tmp145_ = FALSE(0);
35849 _tmp147_ = array_type;
35850 _tmp148_ = bala_array_type_get_rank (_tmp147_);
35851 _tmp149_ = _tmp148_;
35852 if (!(dim <= _tmp149_)) {
35853 break;
35854 }
35855 _tmp150_ = ccall;
35856 _tmp151_ = bala_ccode_base_module_get_array_length_cvalue (self, value, dim);
35857 _tmp152_ = _tmp151_;
35858 bala_ccode_function_call_add_argument (_tmp150_, _tmp152_);
35859 _bala_ccode_node_unref0 (_tmp152_)((_tmp152_ == ((void*)0)) ? ((void*)0) : (_tmp152_ = (bala_ccode_node_unref
(_tmp152_), ((void*)0))))
;
35860 }
35861 }
35862 }
35863 } else {
35864 BalaDataType* _tmp153_;
35865 BalaDataType* _tmp154_;
35866 _tmp153_ = bala_property_get_property_type (prop);
35867 _tmp154_ = _tmp153_;
35868 if (G_TYPE_CHECK_INSTANCE_TYPE (_tmp154_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp154_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35869 BalaDelegateType* delegate_type = NULL((void*)0);
35870 BalaDataType* _tmp155_;
35871 BalaDataType* _tmp156_;
35872 BalaDelegateType* _tmp157_;
35873 gboolean _tmp158_ = FALSE(0);
35874 _tmp155_ = bala_property_get_property_type (prop);
35875 _tmp156_ = _tmp155_;
35876 _tmp157_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp156_, BALA_TYPE_DELEGATE_TYPE, BalaDelegateType)(((BalaDelegateType*) g_type_check_instance_cast ((GTypeInstance
*) (_tmp156_), ((bala_delegate_type_get_type ())))))
);
35877 delegate_type = _tmp157_;
35878 if (bala_get_ccode_delegate_target ((BalaCodeNode*) prop)) {
35879 BalaDelegateType* _tmp159_;
35880 BalaDelegate* _tmp160_;
35881 BalaDelegate* _tmp161_;
35882 gboolean _tmp162_;
35883 gboolean _tmp163_;
35884 _tmp159_ = delegate_type;
35885 _tmp160_ = bala_delegate_type_get_delegate_symbol (_tmp159_);
35886 _tmp161_ = _tmp160_;
35887 _tmp162_ = bala_delegate_get_has_target (_tmp161_);
35888 _tmp163_ = _tmp162_;
35889 _tmp158_ = _tmp163_;
35890 } else {
35891 _tmp158_ = FALSE(0);
35892 }
35893 if (_tmp158_) {
35894 BalaCCodeFunctionCall* _tmp164_;
35895 BalaCCodeExpression* _tmp165_;
35896 BalaCCodeExpression* _tmp166_;
35897 BalaProperty* _tmp167_;
35898 BalaPropertyAccessor* _tmp168_;
35899 BalaPropertyAccessor* _tmp169_;
35900 BalaDataType* _tmp170_;
35901 BalaDataType* _tmp171_;
35902 gboolean _tmp172_;
35903 gboolean _tmp173_;
35904 _tmp164_ = ccall;
35905 _tmp165_ = bala_ccode_base_module_get_delegate_target_cvalue (self, value);
35906 _tmp166_ = _tmp165_;
35907 bala_ccode_function_call_add_argument (_tmp164_, _tmp166_);
35908 _bala_ccode_node_unref0 (_tmp166_)((_tmp166_ == ((void*)0)) ? ((void*)0) : (_tmp166_ = (bala_ccode_node_unref
(_tmp166_), ((void*)0))))
;
35909 _tmp167_ = base_prop;
35910 _tmp168_ = bala_property_get_set_accessor (_tmp167_);
35911 _tmp169_ = _tmp168_;
35912 _tmp170_ = bala_property_accessor_get_value_type (_tmp169_);
35913 _tmp171_ = _tmp170_;
35914 _tmp172_ = bala_data_type_get_value_owned (_tmp171_);
35915 _tmp173_ = _tmp172_;
35916 if (_tmp173_) {
35917 BalaCCodeFunctionCall* _tmp174_;
35918 BalaCCodeExpression* _tmp175_;
35919 BalaCCodeExpression* _tmp176_;
35920 _tmp174_ = ccall;
35921 _tmp175_ = bala_ccode_base_module_get_delegate_target_destroy_notify_cvalue (self, value);
35922 _tmp176_ = _tmp175_;
35923 bala_ccode_function_call_add_argument (_tmp174_, _tmp176_);
35924 _bala_ccode_node_unref0 (_tmp176_)((_tmp176_ == ((void*)0)) ? ((void*)0) : (_tmp176_ = (bala_ccode_node_unref
(_tmp176_), ((void*)0))))
;
35925 }
35926 }
35927 _bala_code_node_unref0 (delegate_type)((delegate_type == ((void*)0)) ? ((void*)0) : (delegate_type =
(bala_code_node_unref (delegate_type), ((void*)0))))
;
35928 }
35929 }
35930 if (bala_get_ccode_no_accessor_method (prop)) {
35931 BalaCCodeFunctionCall* _tmp177_;
35932 BalaCCodeConstant* _tmp178_;
35933 BalaCCodeConstant* _tmp179_;
35934 _tmp177_ = ccall;
35935 _tmp178_ = bala_ccode_constant_new ("NULL");
35936 _tmp179_ = _tmp178_;
35937 bala_ccode_function_call_add_argument (_tmp177_, (BalaCCodeExpression*) _tmp179_);
35938 _bala_ccode_node_unref0 (_tmp179_)((_tmp179_ == ((void*)0)) ? ((void*)0) : (_tmp179_ = (bala_ccode_node_unref
(_tmp179_), ((void*)0))))
;
35939 }
35940 _tmp180_ = bala_ccode_base_module_get_ccode (self);
35941 _tmp181_ = _tmp180_;
35942 _tmp182_ = ccall;
35943 bala_ccode_function_add_expression (_tmp181_, (BalaCCodeExpression*) _tmp182_);
35944 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
35945 _bala_ccode_node_unref0 (cexpr)((cexpr == ((void*)0)) ? ((void*)0) : (cexpr = (bala_ccode_node_unref
(cexpr), ((void*)0))))
;
35946 _bala_ccode_node_unref0 (ccall)((ccall == ((void*)0)) ? ((void*)0) : (ccall = (bala_ccode_node_unref
(ccall), ((void*)0))))
;
35947 _g_free0 (set_func)(set_func = (g_free (set_func), ((void*)0)));
35948}
35949
35950gboolean
35951bala_ccode_base_module_add_wrapper (BalaCCodeBaseModule* self,
35952 const gchar* wrapper_name)
35953{
35954 BalaSet* _tmp0_;
35955 gboolean result = FALSE(0);
35956 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
35957 g_return_val_if_fail (wrapper_name != NULL, FALSE)do { if ((wrapper_name != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "wrapper_name != NULL"
); return ((0)); } } while (0)
;
35958 _tmp0_ = self->wrappers;
35959 result = bala_collection_add ((BalaCollection*) _tmp0_, wrapper_name);
35960 return result;
35961}
35962
35963gboolean
35964bala_ccode_base_module_add_generated_external_symbol (BalaCCodeBaseModule* self,
35965 BalaSymbol* external_symbol)
35966{
35967 BalaSet* _tmp0_;
35968 gboolean result = FALSE(0);
35969 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
35970 g_return_val_if_fail (external_symbol != NULL, FALSE)do { if ((external_symbol != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "external_symbol != NULL"
); return ((0)); } } while (0)
;
35971 _tmp0_ = self->priv->generated_external_symbols;
35972 result = bala_collection_add ((BalaCollection*) _tmp0_, external_symbol);
35973 return result;
35974}
35975
35976BalaDataType*
35977bala_ccode_base_module_get_callable_creturn_type (BalaCallable* c)
35978{
35979 gboolean _tmp0_ = FALSE(0);
35980 BalaDataType* creturn_type = NULL((void*)0);
35981 BalaDataType* _tmp1_;
35982 BalaDataType* _tmp2_;
35983 BalaDataType* _tmp3_;
35984 BalaDataType* result = NULL((void*)0);
35985 g_return_val_if_fail (c != NULL, NULL)do { if ((c != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "c != NULL"); return
(((void*)0)); } } while (0)
;
35986 if (G_TYPE_CHECK_INSTANCE_TYPE (c, BALA_TYPE_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
c); GType __t = ((bala_method_get_type ())); gboolean __r; if
(!__inst) __r = (0); else if (__inst->g_class && __inst
->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a
(__inst, __t); __r; })))
) {
35987 _tmp0_ = TRUE(!(0));
35988 } else {
35989 _tmp0_ = G_TYPE_CHECK_INSTANCE_TYPE (c, BALA_TYPE_DELEGATE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
c); GType __t = ((bala_delegate_get_type ())); gboolean __r; if
(!__inst) __r = (0); else if (__inst->g_class && __inst
->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a
(__inst, __t); __r; })))
;
35990 }
35991 _bala_assert (_tmp0_, "c is Method || c is Delegate")if (_tmp0_) ; else g_assertion_message_expr ("bala-ccodegen",
"balaccodebasemodule.c", 35991, ((const char*) (__func__)), "c is Method || c is Delegate"
);
;
35992 _tmp1_ = bala_callable_get_return_type (c);
35993 _tmp2_ = _tmp1_;
35994 _tmp3_ = bala_data_type_copy (_tmp2_);
35995 creturn_type = _tmp3_;
35996 if (G_TYPE_CHECK_INSTANCE_TYPE (c, BALA_TYPE_CREATION_METHOD)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
c); GType __t = ((bala_creation_method_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
35997 BalaClass* cl = NULL((void*)0);
35998 BalaSymbol* _tmp4_;
35999 BalaSymbol* _tmp5_;
36000 BalaStruct* st = NULL((void*)0);
36001 BalaSymbol* _tmp6_;
36002 BalaSymbol* _tmp7_;
36003 BalaClass* _tmp8_;
36004 _tmp4_ = bala_symbol_get_parent_symbol ((BalaSymbol*) c);
36005 _tmp5_ = _tmp4_;
36006 cl = G_TYPE_CHECK_INSTANCE_TYPE (_tmp5_, BALA_TYPE_CLASS)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp5_); GType __t = ((bala_class_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaClass*) _tmp5_) : NULL((void*)0);
36007 _tmp6_ = bala_symbol_get_parent_symbol ((BalaSymbol*) c);
36008 _tmp7_ = _tmp6_;
36009 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp7_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp7_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp7_) : NULL((void*)0);
36010 _tmp8_ = cl;
36011 if (_tmp8_ != NULL((void*)0)) {
36012 BalaClass* _tmp9_;
36013 BalaObjectType* _tmp10_;
36014 _tmp9_ = cl;
36015 _tmp10_ = bala_object_type_new ((BalaObjectTypeSymbol*) _tmp9_);
36016 _bala_code_node_unref0 (creturn_type)((creturn_type == ((void*)0)) ? ((void*)0) : (creturn_type = (
bala_code_node_unref (creturn_type), ((void*)0))))
;
36017 creturn_type = (BalaDataType*) _tmp10_;
36018 } else {
36019 gboolean _tmp11_ = FALSE(0);
36020 BalaStruct* _tmp12_;
36021 _tmp12_ = st;
36022 if (_tmp12_ != NULL((void*)0)) {
36023 BalaStruct* _tmp13_;
36024 _tmp13_ = st;
36025 _tmp11_ = bala_struct_is_simple_type (_tmp13_);
36026 } else {
36027 _tmp11_ = FALSE(0);
36028 }
36029 if (_tmp11_) {
36030 BalaStruct* _tmp14_;
36031 BalaStructValueType* _tmp15_;
36032 _tmp14_ = st;
36033 _tmp15_ = bala_struct_value_type_new (_tmp14_);
36034 _bala_code_node_unref0 (creturn_type)((creturn_type == ((void*)0)) ? ((void*)0) : (creturn_type = (
bala_code_node_unref (creturn_type), ((void*)0))))
;
36035 creturn_type = (BalaDataType*) _tmp15_;
36036 }
36037 }
36038 } else {
36039 BalaDataType* _tmp16_;
36040 BalaDataType* _tmp17_;
36041 _tmp16_ = bala_callable_get_return_type (c);
36042 _tmp17_ = _tmp16_;
36043 if (bala_data_type_is_real_non_null_struct_type (_tmp17_)) {
36044 BalaVoidType* _tmp18_;
36045 _tmp18_ = bala_void_type_new (NULL((void*)0));
36046 _bala_code_node_unref0 (creturn_type)((creturn_type == ((void*)0)) ? ((void*)0) : (creturn_type = (
bala_code_node_unref (creturn_type), ((void*)0))))
;
36047 creturn_type = (BalaDataType*) _tmp18_;
36048 }
36049 }
36050 result = creturn_type;
36051 return result;
36052}
36053
36054BalaCCodeExpression*
36055bala_ccode_base_module_default_value_for_type (BalaCCodeBaseModule* self,
36056 BalaDataType* type,
36057 gboolean initializer_expression,
36058 gboolean on_error)
36059{
36060 BalaStruct* st = NULL((void*)0);
36061 BalaTypeSymbol* _tmp0_;
36062 BalaTypeSymbol* _tmp1_;
36063 BalaArrayType* array_type = NULL((void*)0);
36064 BalaArrayType* _tmp2_;
36065 gboolean _tmp3_ = FALSE(0);
36066 gboolean _tmp4_ = FALSE(0);
36067 BalaTypeSymbol* _tmp5_;
36068 BalaTypeSymbol* _tmp6_;
36069 BalaCCodeExpression* result = NULL((void*)0);
36070 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
36071 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
36072 _tmp0_ = bala_data_type_get_type_symbol (type);
36073 _tmp1_ = _tmp0_;
36074 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp1_) : NULL((void*)0);
36075 _tmp2_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_array_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) type) : NULL((void*)0));
36076 array_type = _tmp2_;
36077 _tmp5_ = bala_data_type_get_type_symbol (type);
36078 _tmp6_ = _tmp5_;
36079 if (_tmp6_ != NULL((void*)0)) {
36080 gboolean _tmp7_;
36081 gboolean _tmp8_;
36082 _tmp7_ = bala_data_type_get_nullable (type);
36083 _tmp8_ = _tmp7_;
36084 _tmp4_ = !_tmp8_;
36085 } else {
36086 _tmp4_ = FALSE(0);
36087 }
36088 if (_tmp4_) {
36089 gchar* _tmp9_ = NULL((void*)0);
36090 if (on_error) {
36091 BalaTypeSymbol* _tmp10_;
36092 BalaTypeSymbol* _tmp11_;
36093 gchar* _tmp12_;
36094 _tmp10_ = bala_data_type_get_type_symbol (type);
36095 _tmp11_ = _tmp10_;
36096 _tmp12_ = bala_get_ccode_default_value_on_error (_tmp11_);
36097 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
36098 _tmp9_ = _tmp12_;
36099 } else {
36100 BalaTypeSymbol* _tmp13_;
36101 BalaTypeSymbol* _tmp14_;
36102 gchar* _tmp15_;
36103 _tmp13_ = bala_data_type_get_type_symbol (type);
36104 _tmp14_ = _tmp13_;
36105 _tmp15_ = bala_get_ccode_default_value (_tmp14_);
36106 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
36107 _tmp9_ = _tmp15_;
36108 }
36109 _tmp3_ = g_strcmp0 (_tmp9_, "") != 0;
36110 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
36111 } else {
36112 _tmp3_ = FALSE(0);
36113 }
36114 if (_tmp3_) {
36115 gchar* _tmp16_ = NULL((void*)0);
36116 BalaCCodeConstant* _tmp23_;
36117 if (on_error) {
36118 BalaTypeSymbol* _tmp17_;
36119 BalaTypeSymbol* _tmp18_;
36120 gchar* _tmp19_;
36121 _tmp17_ = bala_data_type_get_type_symbol (type);
36122 _tmp18_ = _tmp17_;
36123 _tmp19_ = bala_get_ccode_default_value_on_error (_tmp18_);
36124 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
36125 _tmp16_ = _tmp19_;
36126 } else {
36127 BalaTypeSymbol* _tmp20_;
36128 BalaTypeSymbol* _tmp21_;
36129 gchar* _tmp22_;
36130 _tmp20_ = bala_data_type_get_type_symbol (type);
36131 _tmp21_ = _tmp20_;
36132 _tmp22_ = bala_get_ccode_default_value (_tmp21_);
36133 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
36134 _tmp16_ = _tmp22_;
36135 }
36136 _tmp23_ = bala_ccode_constant_new (_tmp16_);
36137 result = (BalaCCodeExpression*) _tmp23_;
36138 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
36139 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36140 return result;
36141 } else {
36142 gboolean _tmp24_ = FALSE(0);
36143 gboolean _tmp25_ = FALSE(0);
36144 if (initializer_expression) {
36145 gboolean _tmp26_;
36146 gboolean _tmp27_;
36147 _tmp26_ = bala_data_type_get_nullable (type);
36148 _tmp27_ = _tmp26_;
36149 _tmp25_ = !_tmp27_;
36150 } else {
36151 _tmp25_ = FALSE(0);
36152 }
36153 if (_tmp25_) {
36154 gboolean _tmp28_ = FALSE(0);
36155 BalaStruct* _tmp29_;
36156 _tmp29_ = st;
36157 if (_tmp29_ != NULL((void*)0)) {
36158 _tmp28_ = TRUE(!(0));
36159 } else {
36160 gboolean _tmp30_ = FALSE(0);
36161 BalaArrayType* _tmp31_;
36162 _tmp31_ = array_type;
36163 if (_tmp31_ != NULL((void*)0)) {
36164 BalaArrayType* _tmp32_;
36165 gboolean _tmp33_;
36166 gboolean _tmp34_;
36167 _tmp32_ = array_type;
36168 _tmp33_ = bala_array_type_get_fixed_length (_tmp32_);
36169 _tmp34_ = _tmp33_;
36170 _tmp30_ = _tmp34_;
36171 } else {
36172 _tmp30_ = FALSE(0);
36173 }
36174 _tmp28_ = _tmp30_;
36175 }
36176 _tmp24_ = _tmp28_;
36177 } else {
36178 _tmp24_ = FALSE(0);
36179 }
36180 if (_tmp24_) {
36181 BalaCCodeInitializerList* clist = NULL((void*)0);
36182 BalaCCodeInitializerList* _tmp35_;
36183 BalaCCodeInitializerList* _tmp36_;
36184 BalaCCodeConstant* _tmp37_;
36185 BalaCCodeConstant* _tmp38_;
36186 _tmp35_ = bala_ccode_initializer_list_new ();
36187 clist = _tmp35_;
36188 _tmp36_ = clist;
36189 _tmp37_ = bala_ccode_constant_new ("0");
36190 _tmp38_ = _tmp37_;
36191 bala_ccode_initializer_list_append (_tmp36_, (BalaCCodeExpression*) _tmp38_);
36192 _bala_ccode_node_unref0 (_tmp38_)((_tmp38_ == ((void*)0)) ? ((void*)0) : (_tmp38_ = (bala_ccode_node_unref
(_tmp38_), ((void*)0))))
;
36193 result = (BalaCCodeExpression*) clist;
36194 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36195 return result;
36196 } else {
36197 gboolean _tmp39_ = FALSE(0);
36198 gboolean _tmp40_ = FALSE(0);
36199 gboolean _tmp41_ = FALSE(0);
36200 gboolean _tmp42_ = FALSE(0);
36201 gboolean _tmp43_ = FALSE(0);
36202 BalaTypeSymbol* _tmp44_;
36203 BalaTypeSymbol* _tmp45_;
36204 _tmp44_ = bala_data_type_get_type_symbol (type);
36205 _tmp45_ = _tmp44_;
36206 if (_tmp45_ != NULL((void*)0)) {
36207 BalaTypeSymbol* _tmp46_;
36208 BalaTypeSymbol* _tmp47_;
36209 _tmp46_ = bala_data_type_get_type_symbol (type);
36210 _tmp47_ = _tmp46_;
36211 _tmp43_ = bala_typesymbol_is_reference_type (_tmp47_);
36212 } else {
36213 _tmp43_ = FALSE(0);
36214 }
36215 if (_tmp43_) {
36216 _tmp42_ = TRUE(!(0));
36217 } else {
36218 gboolean _tmp48_;
36219 gboolean _tmp49_;
36220 _tmp48_ = bala_data_type_get_nullable (type);
36221 _tmp49_ = _tmp48_;
36222 _tmp42_ = _tmp49_;
36223 }
36224 if (_tmp42_) {
36225 _tmp41_ = TRUE(!(0));
36226 } else {
36227 _tmp41_ = G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_POINTER_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_pointer_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
36228 }
36229 if (_tmp41_) {
36230 _tmp40_ = TRUE(!(0));
36231 } else {
36232 _tmp40_ = G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
;
36233 }
36234 if (_tmp40_) {
36235 _tmp39_ = TRUE(!(0));
36236 } else {
36237 gboolean _tmp50_ = FALSE(0);
36238 BalaArrayType* _tmp51_;
36239 _tmp51_ = array_type;
36240 if (_tmp51_ != NULL((void*)0)) {
36241 BalaArrayType* _tmp52_;
36242 gboolean _tmp53_;
36243 gboolean _tmp54_;
36244 _tmp52_ = array_type;
36245 _tmp53_ = bala_array_type_get_fixed_length (_tmp52_);
36246 _tmp54_ = _tmp53_;
36247 _tmp50_ = !_tmp54_;
36248 } else {
36249 _tmp50_ = FALSE(0);
36250 }
36251 _tmp39_ = _tmp50_;
36252 }
36253 if (_tmp39_) {
36254 BalaCCodeConstant* _tmp55_;
36255 _tmp55_ = bala_ccode_constant_new ("NULL");
36256 result = (BalaCCodeExpression*) _tmp55_;
36257 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36258 return result;
36259 } else {
36260 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_GENERIC_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_generic_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
36261 BalaCCodeConstant* _tmp56_;
36262 _tmp56_ = bala_ccode_constant_new ("NULL");
36263 result = (BalaCCodeExpression*) _tmp56_;
36264 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36265 return result;
36266 } else {
36267 if (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ERROR_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_error_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
36268 BalaCCodeConstant* _tmp57_;
36269 _tmp57_ = bala_ccode_constant_new ("NULL");
36270 result = (BalaCCodeExpression*) _tmp57_;
36271 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36272 return result;
36273 } else {
36274 if (BALA_IS_CTYPE (type)(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
(type)); GType __t = ((bala_ctype_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; }))))
) {
36275 const gchar* _tmp58_;
36276 const gchar* _tmp59_;
36277 BalaCCodeConstant* _tmp60_;
36278 _tmp58_ = bala_ctype_get_cdefault_value (G_TYPE_CHECK_INSTANCE_CAST (type, BALA_TYPE_CTYPE, BalaCType)(((BalaCType*) g_type_check_instance_cast ((GTypeInstance*) (
type), ((bala_ctype_get_type ())))))
);
36279 _tmp59_ = _tmp58_;
36280 _tmp60_ = bala_ccode_constant_new (_tmp59_);
36281 result = (BalaCCodeExpression*) _tmp60_;
36282 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36283 return result;
36284 }
36285 }
36286 }
36287 }
36288 }
36289 }
36290 result = NULL((void*)0);
36291 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36292 return result;
36293}
36294
36295static void
36296bala_ccode_base_module_create_property_type_check_statement (BalaCCodeBaseModule* self,
36297 BalaProperty* prop,
36298 gboolean check_return_type,
36299 BalaTypeSymbol* t,
36300 gboolean non_null,
36301 const gchar* var_name)
36302{
36303 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
36304 g_return_if_fail (prop != NULL)do { if ((prop != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "prop != NULL"
); return; } } while (0)
;
36305 g_return_if_fail (t != NULL)do { if ((t != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "t != NULL"); return
; } } while (0)
;
36306 g_return_if_fail (var_name != NULL)do { if ((var_name != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "var_name != NULL"
); return; } } while (0)
;
36307 if (check_return_type) {
36308 BalaDataType* _tmp0_;
36309 BalaDataType* _tmp1_;
36310 _tmp0_ = bala_property_get_property_type (prop);
36311 _tmp1_ = _tmp0_;
36312 bala_ccode_base_module_create_type_check_statement (self, (BalaCodeNode*) prop, _tmp1_, t, non_null, var_name);
36313 } else {
36314 BalaVoidType* _tmp2_;
36315 BalaVoidType* _tmp3_;
36316 _tmp2_ = bala_void_type_new (NULL((void*)0));
36317 _tmp3_ = _tmp2_;
36318 bala_ccode_base_module_create_type_check_statement (self, (BalaCodeNode*) prop, (BalaDataType*) _tmp3_, t, non_null, var_name);
36319 _bala_code_node_unref0 (_tmp3_)((_tmp3_ == ((void*)0)) ? ((void*)0) : (_tmp3_ = (bala_code_node_unref
(_tmp3_), ((void*)0))))
;
36320 }
36321}
36322
36323static void
36324bala_ccode_base_module_real_create_type_check_statement (BalaCCodeBaseModule* self,
36325 BalaCodeNode* method_node,
36326 BalaDataType* ret_type,
36327 BalaTypeSymbol* t,
36328 gboolean non_null,
36329 const gchar* var_name)
36330{
36331 g_return_if_fail (method_node != NULL)do { if ((method_node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "method_node != NULL"
); return; } } while (0)
;
36332 g_return_if_fail (ret_type != NULL)do { if ((ret_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "ret_type != NULL"
); return; } } while (0)
;
36333 g_return_if_fail (t != NULL)do { if ((t != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "t != NULL"); return
; } } while (0)
;
36334 g_return_if_fail (var_name != NULL)do { if ((var_name != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "var_name != NULL"
); return; } } while (0)
;
36335}
36336
36337void
36338bala_ccode_base_module_create_type_check_statement (BalaCCodeBaseModule* self,
36339 BalaCodeNode* method_node,
36340 BalaDataType* ret_type,
36341 BalaTypeSymbol* t,
36342 gboolean non_null,
36343 const gchar* var_name)
36344{
36345 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
36346 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->create_type_check_statement (self, method_node, ret_type, t, non_null, var_name);
36347}
36348
36349gint
36350bala_ccode_base_module_get_param_pos (BalaCCodeBaseModule* self,
36351 gdouble param_pos,
36352 gboolean ellipsis)
36353{
36354 gint result = 0;
36355 g_return_val_if_fail (self != NULL, 0)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (0); } } while (0)
;
36356 if (!ellipsis) {
36357 if (param_pos >= ((gdouble) 0)) {
36358 result = (gint) (param_pos * 1000);
36359 return result;
36360 } else {
36361 result = (gint) ((100 + param_pos) * 1000);
36362 return result;
36363 }
36364 } else {
36365 if (param_pos >= ((gdouble) 0)) {
36366 result = (gint) ((100 + param_pos) * 1000);
36367 return result;
36368 } else {
36369 result = (gint) ((200 + param_pos) * 1000);
36370 return result;
36371 }
36372 }
36373}
36374
36375BalaCCodeExpression*
36376bala_ccode_base_module_get_ccodenode (BalaCCodeBaseModule* self,
36377 BalaExpression* node)
36378{
36379 BalaCCodeExpression* _tmp0_;
36380 BalaCCodeExpression* _tmp1_;
36381 BalaCCodeExpression* _tmp2_;
36382 BalaCCodeExpression* result = NULL((void*)0);
36383 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
36384 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
36385 _tmp0_ = bala_get_cvalue (node);
36386 if (_tmp0_ == NULL((void*)0)) {
36387 bala_code_node_emit ((BalaCodeNode*) node, (BalaCodeGenerator*) self);
36388 }
36389 _tmp1_ = bala_get_cvalue (node);
36390 _tmp2_ = _bala_ccode_node_ref0 (_tmp1_);
36391 result = _tmp2_;
36392 return result;
36393}
36394
36395gboolean
36396bala_ccode_base_module_is_lvalue_access_allowed (BalaCCodeBaseModule* self,
36397 BalaDataType* type)
36398{
36399 BalaArrayType* array_type = NULL((void*)0);
36400 BalaArrayType* _tmp0_;
36401 gboolean _tmp1_ = FALSE(0);
36402 BalaArrayType* _tmp2_;
36403 BalaTypeSymbol* _tmp6_;
36404 BalaTypeSymbol* _tmp7_;
36405 gboolean result = FALSE(0);
36406 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
36407 g_return_val_if_fail (type != NULL, FALSE)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return ((0)); } } while (0)
;
36408 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_array_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) type) : NULL((void*)0));
36409 array_type = _tmp0_;
36410 _tmp2_ = array_type;
36411 if (_tmp2_ != NULL((void*)0)) {
36412 BalaArrayType* _tmp3_;
36413 gboolean _tmp4_;
36414 gboolean _tmp5_;
36415 _tmp3_ = array_type;
36416 _tmp4_ = bala_array_type_get_inline_allocated (_tmp3_);
36417 _tmp5_ = _tmp4_;
36418 _tmp1_ = _tmp5_;
36419 } else {
36420 _tmp1_ = FALSE(0);
36421 }
36422 if (_tmp1_) {
36423 result = FALSE(0);
36424 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36425 return result;
36426 }
36427 _tmp6_ = bala_data_type_get_type_symbol (type);
36428 _tmp7_ = _tmp6_;
36429 if (_tmp7_ != NULL((void*)0)) {
36430 BalaTypeSymbol* _tmp8_;
36431 BalaTypeSymbol* _tmp9_;
36432 _tmp8_ = bala_data_type_get_type_symbol (type);
36433 _tmp9_ = _tmp8_;
36434 result = bala_code_node_get_attribute_bool ((BalaCodeNode*) _tmp9_, "CCode", "lvalue_access", TRUE(!(0)));
36435 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36436 return result;
36437 }
36438 result = TRUE(!(0));
36439 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36440 return result;
36441}
36442
36443gboolean
36444bala_ccode_base_module_requires_memset_init (BalaCCodeBaseModule* self,
36445 BalaVariable* variable,
36446 BalaCCodeExpression* * size)
36447{
36448 BalaCCodeExpression* _bala_size = NULL((void*)0);
36449 BalaArrayType* array_type = NULL((void*)0);
36450 BalaDataType* _tmp0_;
36451 BalaDataType* _tmp1_;
36452 gboolean _tmp2_ = FALSE(0);
36453 BalaArrayType* _tmp3_;
36454 gboolean result = FALSE(0);
36455 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
36456 g_return_val_if_fail (variable != NULL, FALSE)do { if ((variable != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "variable != NULL"
); return ((0)); } } while (0)
;
36457 _tmp0_ = bala_variable_get_variable_type (variable);
36458 _tmp1_ = _tmp0_;
36459 array_type = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_array_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) _tmp1_) : NULL((void*)0);
36460 _tmp3_ = array_type;
36461 if (_tmp3_ != NULL((void*)0)) {
36462 BalaArrayType* _tmp4_;
36463 gboolean _tmp5_;
36464 gboolean _tmp6_;
36465 _tmp4_ = array_type;
36466 _tmp5_ = bala_array_type_get_fixed_length (_tmp4_);
36467 _tmp6_ = _tmp5_;
36468 _tmp2_ = _tmp6_;
36469 } else {
36470 _tmp2_ = FALSE(0);
36471 }
36472 if (_tmp2_) {
36473 BalaCCodeFunctionCall* sizeof_call = NULL((void*)0);
36474 BalaCCodeIdentifier* _tmp7_;
36475 BalaCCodeIdentifier* _tmp8_;
36476 BalaCCodeFunctionCall* _tmp9_;
36477 BalaCCodeFunctionCall* _tmp10_;
36478 BalaCCodeFunctionCall* _tmp11_;
36479 BalaArrayType* _tmp12_;
36480 BalaDataType* _tmp13_;
36481 BalaDataType* _tmp14_;
36482 gchar* _tmp15_;
36483 gchar* _tmp16_;
36484 BalaCCodeIdentifier* _tmp17_;
36485 BalaCCodeIdentifier* _tmp18_;
36486 BalaArrayType* _tmp19_;
36487 BalaExpression* _tmp20_;
36488 BalaExpression* _tmp21_;
36489 BalaCCodeExpression* _tmp22_;
36490 BalaCCodeExpression* _tmp23_;
36491 BalaCCodeFunctionCall* _tmp24_;
36492 BalaCCodeBinaryExpression* _tmp25_;
36493 BalaArrayType* _tmp26_;
36494 BalaExpression* _tmp27_;
36495 BalaExpression* _tmp28_;
36496 _tmp7_ = bala_ccode_identifier_new ("sizeof");
36497 _tmp8_ = _tmp7_;
36498 _tmp9_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp8_);
36499 _tmp10_ = _tmp9_;
36500 _bala_ccode_node_unref0 (_tmp8_)((_tmp8_ == ((void*)0)) ? ((void*)0) : (_tmp8_ = (bala_ccode_node_unref
(_tmp8_), ((void*)0))))
;
36501 sizeof_call = _tmp10_;
36502 _tmp11_ = sizeof_call;
36503 _tmp12_ = array_type;
36504 _tmp13_ = bala_array_type_get_element_type (_tmp12_);
36505 _tmp14_ = _tmp13_;
36506 _tmp15_ = bala_get_ccode_name ((BalaCodeNode*) _tmp14_);
36507 _tmp16_ = _tmp15_;
36508 _tmp17_ = bala_ccode_identifier_new (_tmp16_);
36509 _tmp18_ = _tmp17_;
36510 bala_ccode_function_call_add_argument (_tmp11_, (BalaCCodeExpression*) _tmp18_);
36511 _bala_ccode_node_unref0 (_tmp18_)((_tmp18_ == ((void*)0)) ? ((void*)0) : (_tmp18_ = (bala_ccode_node_unref
(_tmp18_), ((void*)0))))
;
36512 _g_free0 (_tmp16_)(_tmp16_ = (g_free (_tmp16_), ((void*)0)));
36513 _tmp19_ = array_type;
36514 _tmp20_ = bala_array_type_get_length (_tmp19_);
36515 _tmp21_ = _tmp20_;
36516 _tmp22_ = bala_ccode_base_module_get_ccodenode (self, _tmp21_);
36517 _tmp23_ = _tmp22_;
36518 _tmp24_ = sizeof_call;
36519 _tmp25_ = bala_ccode_binary_expression_new (BALA_CCODE_BINARY_OPERATOR_MUL, _tmp23_, (BalaCCodeExpression*) _tmp24_);
36520 _bala_ccode_node_unref0 (_bala_size)((_bala_size == ((void*)0)) ? ((void*)0) : (_bala_size = (bala_ccode_node_unref
(_bala_size), ((void*)0))))
;
36521 _bala_size = (BalaCCodeExpression*) _tmp25_;
36522 _bala_ccode_node_unref0 (_tmp23_)((_tmp23_ == ((void*)0)) ? ((void*)0) : (_tmp23_ = (bala_ccode_node_unref
(_tmp23_), ((void*)0))))
;
36523 _tmp26_ = array_type;
36524 _tmp27_ = bala_array_type_get_length (_tmp26_);
36525 _tmp28_ = _tmp27_;
36526 result = !bala_ccode_base_module_is_constant_ccode ((BalaCodeNode*) _tmp28_);
36527 _bala_ccode_node_unref0 (sizeof_call)((sizeof_call == ((void*)0)) ? ((void*)0) : (sizeof_call = (bala_ccode_node_unref
(sizeof_call), ((void*)0))))
;
36528 if (size) {
36529 *size = _bala_size;
36530 } else {
36531 _bala_ccode_node_unref0 (_bala_size)((_bala_size == ((void*)0)) ? ((void*)0) : (_bala_size = (bala_ccode_node_unref
(_bala_size), ((void*)0))))
;
36532 }
36533 return result;
36534 }
36535 _bala_ccode_node_unref0 (_bala_size)((_bala_size == ((void*)0)) ? ((void*)0) : (_bala_size = (bala_ccode_node_unref
(_bala_size), ((void*)0))))
;
36536 _bala_size = NULL((void*)0);
36537 result = FALSE(0);
36538 if (size) {
36539 *size = _bala_size;
36540 } else {
36541 _bala_ccode_node_unref0 (_bala_size)((_bala_size == ((void*)0)) ? ((void*)0) : (_bala_size = (bala_ccode_node_unref
(_bala_size), ((void*)0))))
;
36542 }
36543 return result;
36544}
36545
36546BalaCCodeDeclaratorSuffix*
36547bala_ccode_base_module_get_ccode_declarator_suffix (BalaCCodeBaseModule* self,
36548 BalaDataType* type)
36549{
36550 BalaArrayType* array_type = NULL((void*)0);
36551 BalaArrayType* _tmp0_;
36552 BalaArrayType* _tmp1_;
36553 BalaCCodeDeclaratorSuffix* result = NULL((void*)0);
36554 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
36555 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
36556 _tmp0_ = _bala_code_node_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (type, BALA_TYPE_ARRAY_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
type); GType __t = ((bala_array_type_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaArrayType*) type) : NULL((void*)0));
36557 array_type = _tmp0_;
36558 _tmp1_ = array_type;
36559 if (_tmp1_ != NULL((void*)0)) {
36560 BalaArrayType* _tmp2_;
36561 gboolean _tmp3_;
36562 gboolean _tmp4_;
36563 _tmp2_ = array_type;
36564 _tmp3_ = bala_array_type_get_fixed_length (_tmp2_);
36565 _tmp4_ = _tmp3_;
36566 if (_tmp4_) {
36567 BalaArrayType* _tmp5_;
36568 BalaExpression* _tmp6_;
36569 BalaExpression* _tmp7_;
36570 BalaCCodeExpression* _tmp8_;
36571 BalaCCodeExpression* _tmp9_;
36572 BalaCCodeDeclaratorSuffix* _tmp10_;
36573 BalaCCodeDeclaratorSuffix* _tmp11_;
36574 _tmp5_ = array_type;
36575 _tmp6_ = bala_array_type_get_length (_tmp5_);
36576 _tmp7_ = _tmp6_;
36577 _tmp8_ = bala_ccode_base_module_get_ccodenode (self, _tmp7_);
36578 _tmp9_ = _tmp8_;
36579 _tmp10_ = bala_ccode_declarator_suffix_new_with_array (_tmp9_);
36580 _tmp11_ = _tmp10_;
36581 _bala_ccode_node_unref0 (_tmp9_)((_tmp9_ == ((void*)0)) ? ((void*)0) : (_tmp9_ = (bala_ccode_node_unref
(_tmp9_), ((void*)0))))
;
36582 result = _tmp11_;
36583 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36584 return result;
36585 } else {
36586 BalaArrayType* _tmp12_;
36587 gboolean _tmp13_;
36588 gboolean _tmp14_;
36589 _tmp12_ = array_type;
36590 _tmp13_ = bala_array_type_get_inline_allocated (_tmp12_);
36591 _tmp14_ = _tmp13_;
36592 if (_tmp14_) {
36593 BalaCCodeDeclaratorSuffix* _tmp15_;
36594 _tmp15_ = bala_ccode_declarator_suffix_new_with_array (NULL((void*)0));
36595 result = _tmp15_;
36596 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36597 return result;
36598 }
36599 }
36600 }
36601 result = NULL((void*)0);
36602 _bala_code_node_unref0 (array_type)((array_type == ((void*)0)) ? ((void*)0) : (array_type = (bala_code_node_unref
(array_type), ((void*)0))))
;
36603 return result;
36604}
36605
36606BalaCCodeConstant*
36607bala_ccode_base_module_get_signal_canonical_constant (BalaCCodeBaseModule* self,
36608 BalaSignal* sig,
36609 const gchar* detail)
36610{
36611 gchar* _tmp0_ = NULL((void*)0);
36612 gchar* _tmp3_;
36613 gchar* _tmp4_;
36614 gchar* _tmp5_;
36615 gchar* _tmp6_;
36616 BalaCCodeConstant* _tmp7_;
36617 BalaCCodeConstant* _tmp8_;
36618 BalaCCodeConstant* result = NULL((void*)0);
36619 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
36620 g_return_val_if_fail (sig != NULL, NULL)do { if ((sig != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "sig != NULL")
; return (((void*)0)); } } while (0)
;
36621 if (detail != NULL((void*)0)) {
36622 gchar* _tmp1_;
36623 _tmp1_ = g_strdup_printf ("::%s", detail);
36624 _g_free0 (_tmp0_)(_tmp0_ = (g_free (_tmp0_), ((void*)0)));
36625 _tmp0_ = _tmp1_;
36626 } else {
36627 gchar* _tmp2_;
36628 _tmp2_ = g_strdup ("");
36629 _g_free0 (_tmp0_)(_tmp0_ = (g_free (_tmp0_), ((void*)0)));
36630 _tmp0_ = _tmp2_;
36631 }
36632 _tmp3_ = bala_get_ccode_name ((BalaCodeNode*) sig);
36633 _tmp4_ = _tmp3_;
36634 _tmp5_ = g_strdup_printf ("\"%s%s\"", _tmp4_, _tmp0_);
36635 _tmp6_ = _tmp5_;
36636 _tmp7_ = bala_ccode_constant_new (_tmp6_);
36637 _tmp8_ = _tmp7_;
36638 _g_free0 (_tmp6_)(_tmp6_ = (g_free (_tmp6_), ((void*)0)));
36639 _g_free0 (_tmp4_)(_tmp4_ = (g_free (_tmp4_), ((void*)0)));
36640 result = _tmp8_;
36641 _g_free0 (_tmp0_)(_tmp0_ = (g_free (_tmp0_), ((void*)0)));
36642 return result;
36643}
36644
36645BalaCCodeConstant*
36646bala_ccode_base_module_get_property_canonical_cconstant (BalaCCodeBaseModule* self,
36647 BalaProperty* prop)
36648{
36649 gchar* _tmp0_;
36650 gchar* _tmp1_;
36651 gchar* _tmp2_;
36652 gchar* _tmp3_;
36653 BalaCCodeConstant* _tmp4_;
36654 BalaCCodeConstant* _tmp5_;
36655 BalaCCodeConstant* result = NULL((void*)0);
36656 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
36657 g_return_val_if_fail (prop != NULL, NULL)do { if ((prop != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "prop != NULL"
); return (((void*)0)); } } while (0)
;
36658 _tmp0_ = bala_get_ccode_name ((BalaCodeNode*) prop);
36659 _tmp1_ = _tmp0_;
36660 _tmp2_ = g_strdup_printf ("\"%s\"", _tmp1_);
36661 _tmp3_ = _tmp2_;
36662 _tmp4_ = bala_ccode_constant_new (_tmp3_);
36663 _tmp5_ = _tmp4_;
36664 _g_free0 (_tmp3_)(_tmp3_ = (g_free (_tmp3_), ((void*)0)));
36665 _g_free0 (_tmp1_)(_tmp1_ = (g_free (_tmp1_), ((void*)0)));
36666 result = _tmp5_;
36667 return result;
36668}
36669
36670static void
36671bala_ccode_base_module_real_visit_class (BalaCodeVisitor* base,
36672 BalaClass* cl)
36673{
36674 BalaCCodeBaseModule * self;
36675 self = (BalaCCodeBaseModule*) base;
36676 g_return_if_fail (cl != NULL)do { if ((cl != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "cl != NULL");
return; } } while (0)
;
36677}
36678
36679void
36680bala_ccode_base_module_create_postcondition_statement (BalaCCodeBaseModule* self,
36681 BalaExpression* postcondition)
36682{
36683 BalaCCodeFunctionCall* cassert = NULL((void*)0);
36684 BalaCCodeIdentifier* _tmp0_;
36685 BalaCCodeIdentifier* _tmp1_;
36686 BalaCCodeFunctionCall* _tmp2_;
36687 BalaCCodeFunctionCall* _tmp3_;
36688 gchar* message = NULL((void*)0);
36689 BalaSourceReference* _tmp4_;
36690 BalaSourceReference* _tmp5_;
36691 BalaSourceLocation _tmp6_ = {0};
36692 BalaSourceLocation _tmp7_;
36693 gchar* _tmp8_;
36694 BalaSourceReference* _tmp9_;
36695 BalaSourceReference* _tmp10_;
36696 BalaSourceLocation _tmp11_ = {0};
36697 BalaSourceLocation _tmp12_;
36698 gchar* _tmp13_;
36699 BalaSourceReference* _tmp14_;
36700 BalaSourceReference* _tmp15_;
36701 BalaSourceLocation _tmp16_ = {0};
36702 BalaSourceLocation _tmp17_;
36703 gchar* _tmp18_;
36704 gchar* _tmp19_;
36705 BalaCCodeFunctionCall* _tmp20_;
36706 BalaCCodeExpression* _tmp21_;
36707 BalaCCodeFunctionCall* _tmp22_;
36708 const gchar* _tmp23_;
36709 gchar* _tmp24_;
36710 gchar* _tmp25_;
36711 gchar* _tmp26_;
36712 gchar* _tmp27_;
36713 gchar* _tmp28_;
36714 gchar* _tmp29_;
36715 BalaCCodeConstant* _tmp30_;
36716 BalaCCodeConstant* _tmp31_;
36717 BalaCCodeFunction* _tmp32_;
36718 BalaCCodeFunction* _tmp33_;
36719 BalaCCodeFunctionCall* _tmp34_;
36720 BalaArrayList* _tmp50_;
36721 BalaArrayList* _tmp51_;
36722 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
36723 g_return_if_fail (postcondition != NULL)do { if ((postcondition != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "postcondition != NULL"
); return; } } while (0)
;
36724 _tmp0_ = bala_ccode_identifier_new ("_bala_warn_if_fail");
36725 _tmp1_ = _tmp0_;
36726 _tmp2_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp1_);
36727 _tmp3_ = _tmp2_;
36728 _bala_ccode_node_unref0 (_tmp1_)((_tmp1_ == ((void*)0)) ? ((void*)0) : (_tmp1_ = (bala_ccode_node_unref
(_tmp1_), ((void*)0))))
;
36729 cassert = _tmp3_;
36730 bala_code_node_emit ((BalaCodeNode*) postcondition, (BalaCodeGenerator*) self);
36731 _tmp4_ = bala_code_node_get_source_reference ((BalaCodeNode*) postcondition);
36732 _tmp5_ = _tmp4_;
36733 bala_source_reference_get_begin (_tmp5_, &_tmp6_);
36734 _tmp7_ = _tmp6_;
36735 _tmp8_ = _tmp7_.pos;
36736 _tmp9_ = bala_code_node_get_source_reference ((BalaCodeNode*) postcondition);
36737 _tmp10_ = _tmp9_;
36738 bala_source_reference_get_end (_tmp10_, &_tmp11_);
36739 _tmp12_ = _tmp11_;
36740 _tmp13_ = _tmp12_.pos;
36741 _tmp14_ = bala_code_node_get_source_reference ((BalaCodeNode*) postcondition);
36742 _tmp15_ = _tmp14_;
36743 bala_source_reference_get_begin (_tmp15_, &_tmp16_);
36744 _tmp17_ = _tmp16_;
36745 _tmp18_ = _tmp17_.pos;
36746 _tmp19_ = string_substring ((const gchar*) _tmp8_, (glong) 0, (glong) ((gint) (_tmp13_ - _tmp18_)));
36747 message = _tmp19_;
36748 _tmp20_ = cassert;
36749 _tmp21_ = bala_get_cvalue (postcondition);
36750 bala_ccode_function_call_add_argument (_tmp20_, _tmp21_);
36751 _tmp22_ = cassert;
36752 _tmp23_ = message;
36753 _tmp24_ = string_replace (_tmp23_, "\n", " ");
36754 _tmp25_ = _tmp24_;
36755 _tmp26_ = g_strescape (_tmp25_, "");
36756 _tmp27_ = _tmp26_;
36757 _tmp28_ = g_strdup_printf ("\"%s\"", _tmp27_);
36758 _tmp29_ = _tmp28_;
36759 _tmp30_ = bala_ccode_constant_new (_tmp29_);
36760 _tmp31_ = _tmp30_;
36761 bala_ccode_function_call_add_argument (_tmp22_, (BalaCCodeExpression*) _tmp31_);
36762 _bala_ccode_node_unref0 (_tmp31_)((_tmp31_ == ((void*)0)) ? ((void*)0) : (_tmp31_ = (bala_ccode_node_unref
(_tmp31_), ((void*)0))))
;
36763 _g_free0 (_tmp29_)(_tmp29_ = (g_free (_tmp29_), ((void*)0)));
36764 _g_free0 (_tmp27_)(_tmp27_ = (g_free (_tmp27_), ((void*)0)));
36765 _g_free0 (_tmp25_)(_tmp25_ = (g_free (_tmp25_), ((void*)0)));
36766 self->requires_assert = TRUE(!(0));
36767 _tmp32_ = bala_ccode_base_module_get_ccode (self);
36768 _tmp33_ = _tmp32_;
36769 _tmp34_ = cassert;
36770 bala_ccode_function_add_expression (_tmp33_, (BalaCCodeExpression*) _tmp34_);
36771 {
36772 BalaArrayList* _value_list = NULL((void*)0);
36773 BalaArrayList* _tmp35_;
36774 BalaArrayList* _tmp36_;
36775 BalaArrayList* _tmp37_;
36776 gint _value_size = 0;
36777 BalaArrayList* _tmp38_;
36778 gint _tmp39_;
36779 gint _tmp40_;
36780 gint _value_index = 0;
36781 _tmp35_ = bala_ccode_base_module_get_temp_ref_values (self);
36782 _tmp36_ = _tmp35_;
36783 _tmp37_ = _bala_iterable_ref0 (_tmp36_);
36784 _value_list = _tmp37_;
36785 _tmp38_ = _value_list;
36786 _tmp39_ = bala_collection_get_size ((BalaCollection*) _tmp38_);
36787 _tmp40_ = _tmp39_;
36788 _value_size = _tmp40_;
36789 _value_index = -1;
36790 while (TRUE(!(0))) {
36791 gint _tmp41_;
36792 gint _tmp42_;
36793 BalaTargetValue* value = NULL((void*)0);
36794 BalaArrayList* _tmp43_;
36795 gpointer _tmp44_;
36796 BalaCCodeFunction* _tmp45_;
36797 BalaCCodeFunction* _tmp46_;
36798 BalaTargetValue* _tmp47_;
36799 BalaCCodeExpression* _tmp48_;
36800 BalaCCodeExpression* _tmp49_;
36801 _value_index = _value_index + 1;
36802 _tmp41_ = _value_index;
36803 _tmp42_ = _value_size;
36804 if (!(_tmp41_ < _tmp42_)) {
36805 break;
36806 }
36807 _tmp43_ = _value_list;
36808 _tmp44_ = bala_list_get ((BalaList*) _tmp43_, _value_index);
36809 value = (BalaTargetValue*) _tmp44_;
36810 _tmp45_ = bala_ccode_base_module_get_ccode (self);
36811 _tmp46_ = _tmp45_;
36812 _tmp47_ = value;
36813 _tmp48_ = bala_ccode_base_module_destroy_value (self, _tmp47_, FALSE(0));
36814 _tmp49_ = _tmp48_;
36815 bala_ccode_function_add_expression (_tmp46_, _tmp49_);
36816 _bala_ccode_node_unref0 (_tmp49_)((_tmp49_ == ((void*)0)) ? ((void*)0) : (_tmp49_ = (bala_ccode_node_unref
(_tmp49_), ((void*)0))))
;
36817 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
36818 }
36819 _bala_iterable_unref0 (_value_list)((_value_list == ((void*)0)) ? ((void*)0) : (_value_list = (bala_iterable_unref
(_value_list), ((void*)0))))
;
36820 }
36821 _tmp50_ = bala_ccode_base_module_get_temp_ref_values (self);
36822 _tmp51_ = _tmp50_;
36823 bala_collection_clear ((BalaCollection*) _tmp51_);
36824 _g_free0 (message)(message = (g_free (message), ((void*)0)));
36825 _bala_ccode_node_unref0 (cassert)((cassert == ((void*)0)) ? ((void*)0) : (cassert = (bala_ccode_node_unref
(cassert), ((void*)0))))
;
36826}
36827
36828BalaDataType*
36829bala_ccode_base_module_get_this_type (BalaCCodeBaseModule* self)
36830{
36831 gboolean _tmp0_ = FALSE(0);
36832 BalaMethod* _tmp1_;
36833 BalaMethod* _tmp2_;
36834 BalaDataType* result = NULL((void*)0);
36835 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
36836 _tmp1_ = bala_ccode_base_module_get_current_method (self);
36837 _tmp2_ = _tmp1_;
36838 if (_tmp2_ != NULL((void*)0)) {
36839 BalaMethod* _tmp3_;
36840 BalaMethod* _tmp4_;
36841 BalaMemberBinding _tmp5_;
36842 BalaMemberBinding _tmp6_;
36843 _tmp3_ = bala_ccode_base_module_get_current_method (self);
36844 _tmp4_ = _tmp3_;
36845 _tmp5_ = bala_method_get_binding (_tmp4_);
36846 _tmp6_ = _tmp5_;
36847 _tmp0_ = _tmp6_ == BALA_MEMBER_BINDING_INSTANCE;
36848 } else {
36849 _tmp0_ = FALSE(0);
36850 }
36851 if (_tmp0_) {
36852 BalaMethod* _tmp7_;
36853 BalaMethod* _tmp8_;
36854 BalaParameter* _tmp9_;
36855 BalaParameter* _tmp10_;
36856 BalaDataType* _tmp11_;
36857 BalaDataType* _tmp12_;
36858 _tmp7_ = bala_ccode_base_module_get_current_method (self);
36859 _tmp8_ = _tmp7_;
36860 _tmp9_ = bala_method_get_this_parameter (_tmp8_);
36861 _tmp10_ = _tmp9_;
36862 _tmp11_ = bala_variable_get_variable_type ((BalaVariable*) _tmp10_);
36863 _tmp12_ = _tmp11_;
36864 result = _tmp12_;
36865 return result;
36866 } else {
36867 gboolean _tmp13_ = FALSE(0);
36868 BalaPropertyAccessor* _tmp14_;
36869 BalaPropertyAccessor* _tmp15_;
36870 _tmp14_ = bala_ccode_base_module_get_current_property_accessor (self);
36871 _tmp15_ = _tmp14_;
36872 if (_tmp15_ != NULL((void*)0)) {
36873 BalaPropertyAccessor* _tmp16_;
36874 BalaPropertyAccessor* _tmp17_;
36875 BalaProperty* _tmp18_;
36876 BalaProperty* _tmp19_;
36877 BalaMemberBinding _tmp20_;
36878 BalaMemberBinding _tmp21_;
36879 _tmp16_ = bala_ccode_base_module_get_current_property_accessor (self);
36880 _tmp17_ = _tmp16_;
36881 _tmp18_ = bala_property_accessor_get_prop (_tmp17_);
36882 _tmp19_ = _tmp18_;
36883 _tmp20_ = bala_property_get_binding (_tmp19_);
36884 _tmp21_ = _tmp20_;
36885 _tmp13_ = _tmp21_ == BALA_MEMBER_BINDING_INSTANCE;
36886 } else {
36887 _tmp13_ = FALSE(0);
36888 }
36889 if (_tmp13_) {
36890 BalaPropertyAccessor* _tmp22_;
36891 BalaPropertyAccessor* _tmp23_;
36892 BalaProperty* _tmp24_;
36893 BalaProperty* _tmp25_;
36894 BalaParameter* _tmp26_;
36895 BalaParameter* _tmp27_;
36896 BalaDataType* _tmp28_;
36897 BalaDataType* _tmp29_;
36898 _tmp22_ = bala_ccode_base_module_get_current_property_accessor (self);
36899 _tmp23_ = _tmp22_;
36900 _tmp24_ = bala_property_accessor_get_prop (_tmp23_);
36901 _tmp25_ = _tmp24_;
36902 _tmp26_ = bala_property_get_this_parameter (_tmp25_);
36903 _tmp27_ = _tmp26_;
36904 _tmp28_ = bala_variable_get_variable_type ((BalaVariable*) _tmp27_);
36905 _tmp29_ = _tmp28_;
36906 result = _tmp29_;
36907 return result;
36908 } else {
36909 gboolean _tmp30_ = FALSE(0);
36910 BalaConstructor* _tmp31_;
36911 BalaConstructor* _tmp32_;
36912 _tmp31_ = bala_ccode_base_module_get_current_constructor (self);
36913 _tmp32_ = _tmp31_;
36914 if (_tmp32_ != NULL((void*)0)) {
36915 BalaConstructor* _tmp33_;
36916 BalaConstructor* _tmp34_;
36917 BalaMemberBinding _tmp35_;
36918 BalaMemberBinding _tmp36_;
36919 _tmp33_ = bala_ccode_base_module_get_current_constructor (self);
36920 _tmp34_ = _tmp33_;
36921 _tmp35_ = bala_constructor_get_binding (_tmp34_);
36922 _tmp36_ = _tmp35_;
36923 _tmp30_ = _tmp36_ == BALA_MEMBER_BINDING_INSTANCE;
36924 } else {
36925 _tmp30_ = FALSE(0);
36926 }
36927 if (_tmp30_) {
36928 BalaConstructor* _tmp37_;
36929 BalaConstructor* _tmp38_;
36930 BalaParameter* _tmp39_;
36931 BalaParameter* _tmp40_;
36932 BalaDataType* _tmp41_;
36933 BalaDataType* _tmp42_;
36934 _tmp37_ = bala_ccode_base_module_get_current_constructor (self);
36935 _tmp38_ = _tmp37_;
36936 _tmp39_ = bala_constructor_get_this_parameter (_tmp38_);
36937 _tmp40_ = _tmp39_;
36938 _tmp41_ = bala_variable_get_variable_type ((BalaVariable*) _tmp40_);
36939 _tmp42_ = _tmp41_;
36940 result = _tmp42_;
36941 return result;
36942 } else {
36943 gboolean _tmp43_ = FALSE(0);
36944 BalaDestructor* _tmp44_;
36945 BalaDestructor* _tmp45_;
36946 _tmp44_ = bala_ccode_base_module_get_current_destructor (self);
36947 _tmp45_ = _tmp44_;
36948 if (_tmp45_ != NULL((void*)0)) {
36949 BalaDestructor* _tmp46_;
36950 BalaDestructor* _tmp47_;
36951 BalaMemberBinding _tmp48_;
36952 BalaMemberBinding _tmp49_;
36953 _tmp46_ = bala_ccode_base_module_get_current_destructor (self);
36954 _tmp47_ = _tmp46_;
36955 _tmp48_ = bala_destructor_get_binding (_tmp47_);
36956 _tmp49_ = _tmp48_;
36957 _tmp43_ = _tmp49_ == BALA_MEMBER_BINDING_INSTANCE;
36958 } else {
36959 _tmp43_ = FALSE(0);
36960 }
36961 if (_tmp43_) {
36962 BalaDestructor* _tmp50_;
36963 BalaDestructor* _tmp51_;
36964 BalaParameter* _tmp52_;
36965 BalaParameter* _tmp53_;
36966 BalaDataType* _tmp54_;
36967 BalaDataType* _tmp55_;
36968 _tmp50_ = bala_ccode_base_module_get_current_destructor (self);
36969 _tmp51_ = _tmp50_;
36970 _tmp52_ = bala_destructor_get_this_parameter (_tmp51_);
36971 _tmp53_ = _tmp52_;
36972 _tmp54_ = bala_variable_get_variable_type ((BalaVariable*) _tmp53_);
36973 _tmp55_ = _tmp54_;
36974 result = _tmp55_;
36975 return result;
36976 }
36977 }
36978 }
36979 }
36980 result = NULL((void*)0);
36981 return result;
36982}
36983
36984BalaCCodeFunctionCall*
36985bala_ccode_base_module_generate_instance_cast (BalaCCodeBaseModule* self,
36986 BalaCCodeExpression* expr,
36987 BalaTypeSymbol* type)
36988{
36989 BalaCCodeFunctionCall* _result_ = NULL((void*)0);
36990 BalaCCodeIdentifier* _tmp0_;
36991 BalaCCodeIdentifier* _tmp1_;
36992 BalaCCodeFunctionCall* _tmp2_;
36993 BalaCCodeFunctionCall* _tmp3_;
36994 gchar* _tmp4_;
36995 gchar* _tmp5_;
36996 BalaCCodeIdentifier* _tmp6_;
36997 BalaCCodeIdentifier* _tmp7_;
36998 gchar* _tmp8_;
36999 gchar* _tmp9_;
37000 BalaCCodeIdentifier* _tmp10_;
37001 BalaCCodeIdentifier* _tmp11_;
37002 BalaCCodeFunctionCall* result = NULL((void*)0);
37003 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37004 g_return_val_if_fail (expr != NULL, NULL)do { if ((expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "expr != NULL"
); return (((void*)0)); } } while (0)
;
37005 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
37006 _tmp0_ = bala_ccode_identifier_new ("G_TYPE_CHECK_INSTANCE_CAST");
37007 _tmp1_ = _tmp0_;
37008 _tmp2_ = bala_ccode_function_call_new ((BalaCCodeExpression*) _tmp1_);
37009 _tmp3_ = _tmp2_;
37010 _bala_ccode_node_unref0 (_tmp1_)((_tmp1_ == ((void*)0)) ? ((void*)0) : (_tmp1_ = (bala_ccode_node_unref
(_tmp1_), ((void*)0))))
;
37011 _result_ = _tmp3_;
37012 bala_ccode_function_call_add_argument (_result_, expr);
37013 _tmp4_ = bala_get_ccode_type_id ((BalaCodeNode*) type);
37014 _tmp5_ = _tmp4_;
37015 _tmp6_ = bala_ccode_identifier_new (_tmp5_);
37016 _tmp7_ = _tmp6_;
37017 bala_ccode_function_call_add_argument (_result_, (BalaCCodeExpression*) _tmp7_);
37018 _bala_ccode_node_unref0 (_tmp7_)((_tmp7_ == ((void*)0)) ? ((void*)0) : (_tmp7_ = (bala_ccode_node_unref
(_tmp7_), ((void*)0))))
;
37019 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
37020 _tmp8_ = bala_get_ccode_name ((BalaCodeNode*) type);
37021 _tmp9_ = _tmp8_;
37022 _tmp10_ = bala_ccode_identifier_new (_tmp9_);
37023 _tmp11_ = _tmp10_;
37024 bala_ccode_function_call_add_argument (_result_, (BalaCCodeExpression*) _tmp11_);
37025 _bala_ccode_node_unref0 (_tmp11_)((_tmp11_ == ((void*)0)) ? ((void*)0) : (_tmp11_ = (bala_ccode_node_unref
(_tmp11_), ((void*)0))))
;
37026 _g_free0 (_tmp9_)(_tmp9_ = (g_free (_tmp9_), ((void*)0)));
37027 result = _result_;
37028 return result;
37029}
37030
37031static void
37032bala_ccode_base_module_generate_struct_destroy_function (BalaCCodeBaseModule* self,
37033 BalaStruct* st)
37034{
37035 BalaCCodeFile* _tmp0_;
37036 gchar* _tmp1_;
37037 gchar* _tmp2_;
37038 gboolean _tmp3_;
37039 BalaCCodeFunction* function = NULL((void*)0);
37040 gchar* _tmp4_;
37041 gchar* _tmp5_;
37042 BalaCCodeFunction* _tmp6_;
37043 BalaCCodeFunction* _tmp7_;
37044 BalaCCodeFunction* _tmp8_;
37045 BalaCCodeFunction* _tmp9_;
37046 gchar* _tmp10_;
37047 gchar* _tmp11_;
37048 gchar* _tmp12_;
37049 gchar* _tmp13_;
37050 BalaCCodeParameter* _tmp14_;
37051 BalaCCodeParameter* _tmp15_;
37052 BalaCCodeBaseModuleEmitContext* _tmp16_;
37053 BalaCCodeBaseModuleEmitContext* _tmp17_;
37054 BalaCCodeFunction* _tmp18_;
37055 BalaTargetValue* this_value = NULL((void*)0);
37056 BalaTargetValue* _tmp19_;
37057 BalaCCodeFile* _tmp47_;
37058 BalaCCodeFunction* _tmp48_;
37059 BalaCCodeFile* _tmp49_;
37060 BalaCCodeFunction* _tmp50_;
37061 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
37062 g_return_if_fail (st != NULL)do { if ((st != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "st != NULL");
return; } } while (0)
;
37063 _tmp0_ = self->cfile;
37064 _tmp1_ = bala_get_ccode_destroy_function ((BalaTypeSymbol*) st);
37065 _tmp2_ = _tmp1_;
37066 _tmp3_ = bala_ccode_file_add_declaration (_tmp0_, _tmp2_);
37067 _g_free0 (_tmp2_)(_tmp2_ = (g_free (_tmp2_), ((void*)0)));
37068 if (_tmp3_) {
37069 return;
37070 }
37071 _tmp4_ = bala_get_ccode_destroy_function ((BalaTypeSymbol*) st);
37072 _tmp5_ = _tmp4_;
37073 _tmp6_ = bala_ccode_function_new (_tmp5_, "void");
37074 _tmp7_ = _tmp6_;
37075 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
37076 function = _tmp7_;
37077 _tmp8_ = function;
37078 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp8_, BALA_CCODE_MODIFIERS_STATIC);
37079 _tmp9_ = function;
37080 _tmp10_ = bala_get_ccode_name ((BalaCodeNode*) st);
37081 _tmp11_ = _tmp10_;
37082 _tmp12_ = g_strdup_printf ("%s *", _tmp11_);
37083 _tmp13_ = _tmp12_;
37084 _tmp14_ = bala_ccode_parameter_new ("self", _tmp13_);
37085 _tmp15_ = _tmp14_;
37086 bala_ccode_function_add_parameter (_tmp9_, _tmp15_);
37087 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
37088 _g_free0 (_tmp13_)(_tmp13_ = (g_free (_tmp13_), ((void*)0)));
37089 _g_free0 (_tmp11_)(_tmp11_ = (g_free (_tmp11_), ((void*)0)));
37090 _tmp16_ = bala_ccode_base_module_emit_context_new (NULL((void*)0));
37091 _tmp17_ = _tmp16_;
37092 bala_ccode_base_module_push_context (self, _tmp17_);
37093 _bala_ccode_base_module_emit_context_unref0 (_tmp17_)((_tmp17_ == ((void*)0)) ? ((void*)0) : (_tmp17_ = (bala_ccode_base_module_emit_context_unref
(_tmp17_), ((void*)0))))
;
37094 _tmp18_ = function;
37095 bala_ccode_base_module_push_function (self, _tmp18_);
37096 _tmp19_ = bala_ccode_base_module_load_this_parameter (self, (BalaTypeSymbol*) st);
37097 this_value = _tmp19_;
37098 {
37099 BalaList* _f_list = NULL((void*)0);
37100 BalaList* _tmp20_;
37101 BalaList* _tmp21_;
37102 gint _f_size = 0;
37103 BalaList* _tmp22_;
37104 gint _tmp23_;
37105 gint _tmp24_;
37106 gint _f_index = 0;
37107 _tmp20_ = bala_struct_get_fields (st);
37108 _tmp21_ = _bala_iterable_ref0 (_tmp20_);
37109 _f_list = _tmp21_;
37110 _tmp22_ = _f_list;
37111 _tmp23_ = bala_collection_get_size ((BalaCollection*) _tmp22_);
37112 _tmp24_ = _tmp23_;
37113 _f_size = _tmp24_;
37114 _f_index = -1;
37115 while (TRUE(!(0))) {
37116 gint _tmp25_;
37117 gint _tmp26_;
37118 BalaField* f = NULL((void*)0);
37119 BalaList* _tmp27_;
37120 gpointer _tmp28_;
37121 BalaField* _tmp29_;
37122 BalaMemberBinding _tmp30_;
37123 BalaMemberBinding _tmp31_;
37124 _f_index = _f_index + 1;
37125 _tmp25_ = _f_index;
37126 _tmp26_ = _f_size;
37127 if (!(_tmp25_ < _tmp26_)) {
37128 break;
37129 }
37130 _tmp27_ = _f_list;
37131 _tmp28_ = bala_list_get (_tmp27_, _f_index);
37132 f = (BalaField*) _tmp28_;
37133 _tmp29_ = f;
37134 _tmp30_ = bala_field_get_binding (_tmp29_);
37135 _tmp31_ = _tmp30_;
37136 if (_tmp31_ == BALA_MEMBER_BINDING_INSTANCE) {
37137 gboolean _tmp32_ = FALSE(0);
37138 gboolean _tmp33_ = FALSE(0);
37139 BalaField* _tmp34_;
37140 BalaDataType* _tmp35_;
37141 BalaDataType* _tmp36_;
37142 _tmp34_ = f;
37143 _tmp35_ = bala_variable_get_variable_type ((BalaVariable*) _tmp34_);
37144 _tmp36_ = _tmp35_;
37145 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp36_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp36_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
37146 _tmp33_ = TRUE(!(0));
37147 } else {
37148 BalaField* _tmp37_;
37149 _tmp37_ = f;
37150 _tmp33_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp37_);
37151 }
37152 if (_tmp33_) {
37153 BalaField* _tmp38_;
37154 BalaDataType* _tmp39_;
37155 BalaDataType* _tmp40_;
37156 _tmp38_ = f;
37157 _tmp39_ = bala_variable_get_variable_type ((BalaVariable*) _tmp38_);
37158 _tmp40_ = _tmp39_;
37159 _tmp32_ = bala_ccode_base_module_requires_destroy (_tmp40_);
37160 } else {
37161 _tmp32_ = FALSE(0);
37162 }
37163 if (_tmp32_) {
37164 BalaCCodeFunction* _tmp41_;
37165 BalaCCodeFunction* _tmp42_;
37166 BalaField* _tmp43_;
37167 BalaTargetValue* _tmp44_;
37168 BalaCCodeExpression* _tmp45_;
37169 BalaCCodeExpression* _tmp46_;
37170 _tmp41_ = bala_ccode_base_module_get_ccode (self);
37171 _tmp42_ = _tmp41_;
37172 _tmp43_ = f;
37173 _tmp44_ = this_value;
37174 _tmp45_ = bala_ccode_base_module_destroy_field (self, _tmp43_, _tmp44_);
37175 _tmp46_ = _tmp45_;
37176 bala_ccode_function_add_expression (_tmp42_, _tmp46_);
37177 _bala_ccode_node_unref0 (_tmp46_)((_tmp46_ == ((void*)0)) ? ((void*)0) : (_tmp46_ = (bala_ccode_node_unref
(_tmp46_), ((void*)0))))
;
37178 }
37179 }
37180 _bala_code_node_unref0 (f)((f == ((void*)0)) ? ((void*)0) : (f = (bala_code_node_unref (
f), ((void*)0))))
;
37181 }
37182 _bala_iterable_unref0 (_f_list)((_f_list == ((void*)0)) ? ((void*)0) : (_f_list = (bala_iterable_unref
(_f_list), ((void*)0))))
;
37183 }
37184 bala_ccode_base_module_pop_function (self);
37185 bala_ccode_base_module_pop_context (self);
37186 _tmp47_ = self->cfile;
37187 _tmp48_ = function;
37188 bala_ccode_file_add_function_declaration (_tmp47_, _tmp48_);
37189 _tmp49_ = self->cfile;
37190 _tmp50_ = function;
37191 bala_ccode_file_add_function (_tmp49_, _tmp50_);
37192 _bala_target_value_unref0 (this_value)((this_value == ((void*)0)) ? ((void*)0) : (this_value = (bala_target_value_unref
(this_value), ((void*)0))))
;
37193 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
37194}
37195
37196static void
37197bala_ccode_base_module_generate_struct_copy_function (BalaCCodeBaseModule* self,
37198 BalaStruct* st)
37199{
37200 BalaCCodeFile* _tmp0_;
37201 gchar* _tmp1_;
37202 gchar* _tmp2_;
37203 gboolean _tmp3_;
37204 BalaCCodeFunction* function = NULL((void*)0);
37205 gchar* _tmp4_;
37206 gchar* _tmp5_;
37207 BalaCCodeFunction* _tmp6_;
37208 BalaCCodeFunction* _tmp7_;
37209 BalaCCodeFunction* _tmp8_;
37210 BalaCCodeFunction* _tmp9_;
37211 gchar* _tmp10_;
37212 gchar* _tmp11_;
37213 gchar* _tmp12_;
37214 gchar* _tmp13_;
37215 BalaCCodeParameter* _tmp14_;
37216 BalaCCodeParameter* _tmp15_;
37217 BalaCCodeFunction* _tmp16_;
37218 gchar* _tmp17_;
37219 gchar* _tmp18_;
37220 gchar* _tmp19_;
37221 gchar* _tmp20_;
37222 BalaCCodeParameter* _tmp21_;
37223 BalaCCodeParameter* _tmp22_;
37224 BalaCCodeBaseModuleEmitContext* _tmp23_;
37225 BalaCCodeBaseModuleEmitContext* _tmp24_;
37226 BalaCCodeFunction* _tmp25_;
37227 BalaGLibValue* dest_struct = NULL((void*)0);
37228 BalaDataType* _tmp26_;
37229 BalaDataType* _tmp27_;
37230 BalaCCodeIdentifier* _tmp28_;
37231 BalaCCodeIdentifier* _tmp29_;
37232 BalaGLibValue* _tmp30_;
37233 BalaGLibValue* _tmp31_;
37234 BalaCCodeFile* _tmp65_;
37235 BalaCCodeFunction* _tmp66_;
37236 BalaCCodeFile* _tmp67_;
37237 BalaCCodeFunction* _tmp68_;
37238 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
27
Taking true branch
28
Loop condition is false. Exiting loop
37239 g_return_if_fail (st != NULL)do { if ((st != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "st != NULL");
return; } } while (0)
;
29
Assuming 'st' is not equal to null
30
Taking true branch
31
Loop condition is false. Exiting loop
37240 _tmp0_ = self->cfile;
37241 _tmp1_ = bala_get_ccode_copy_function ((BalaTypeSymbol*) st);
37242 _tmp2_ = _tmp1_;
37243 _tmp3_ = bala_ccode_file_add_declaration (_tmp0_, _tmp2_);
37244 _g_free0 (_tmp2_)(_tmp2_ = (g_free (_tmp2_), ((void*)0)));
37245 if (_tmp3_) {
32
Assuming '_tmp3_' is 0
33
Taking false branch
37246 return;
37247 }
37248 _tmp4_ = bala_get_ccode_copy_function ((BalaTypeSymbol*) st);
37249 _tmp5_ = _tmp4_;
37250 _tmp6_ = bala_ccode_function_new (_tmp5_, "void");
37251 _tmp7_ = _tmp6_;
37252 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
37253 function = _tmp7_;
37254 _tmp8_ = function;
37255 bala_ccode_node_set_modifiers ((BalaCCodeNode*) _tmp8_, BALA_CCODE_MODIFIERS_STATIC);
37256 _tmp9_ = function;
37257 _tmp10_ = bala_get_ccode_name ((BalaCodeNode*) st);
37258 _tmp11_ = _tmp10_;
37259 _tmp12_ = g_strdup_printf ("const %s *", _tmp11_);
37260 _tmp13_ = _tmp12_;
37261 _tmp14_ = bala_ccode_parameter_new ("self", _tmp13_);
37262 _tmp15_ = _tmp14_;
37263 bala_ccode_function_add_parameter (_tmp9_, _tmp15_);
37264 _bala_ccode_node_unref0 (_tmp15_)((_tmp15_ == ((void*)0)) ? ((void*)0) : (_tmp15_ = (bala_ccode_node_unref
(_tmp15_), ((void*)0))))
;
34
Assuming '_tmp15_' is equal to null
35
'?' condition is true
37265 _g_free0 (_tmp13_)(_tmp13_ = (g_free (_tmp13_), ((void*)0)));
37266 _g_free0 (_tmp11_)(_tmp11_ = (g_free (_tmp11_), ((void*)0)));
37267 _tmp16_ = function;
37268 _tmp17_ = bala_get_ccode_name ((BalaCodeNode*) st);
37269 _tmp18_ = _tmp17_;
37270 _tmp19_ = g_strdup_printf ("%s *", _tmp18_);
37271 _tmp20_ = _tmp19_;
37272 _tmp21_ = bala_ccode_parameter_new ("dest", _tmp20_);
37273 _tmp22_ = _tmp21_;
37274 bala_ccode_function_add_parameter (_tmp16_, _tmp22_);
37275 _bala_ccode_node_unref0 (_tmp22_)((_tmp22_ == ((void*)0)) ? ((void*)0) : (_tmp22_ = (bala_ccode_node_unref
(_tmp22_), ((void*)0))))
;
36
Assuming '_tmp22_' is equal to null
37
'?' condition is true
37276 _g_free0 (_tmp20_)(_tmp20_ = (g_free (_tmp20_), ((void*)0)));
37277 _g_free0 (_tmp18_)(_tmp18_ = (g_free (_tmp18_), ((void*)0)));
37278 _tmp23_ = bala_ccode_base_module_emit_context_new (NULL((void*)0));
37279 _tmp24_ = _tmp23_;
37280 bala_ccode_base_module_push_context (self, _tmp24_);
38
Calling 'bala_ccode_base_module_push_context'
53
Returning from 'bala_ccode_base_module_push_context'
37281 _bala_ccode_base_module_emit_context_unref0 (_tmp24_)((_tmp24_ == ((void*)0)) ? ((void*)0) : (_tmp24_ = (bala_ccode_base_module_emit_context_unref
(_tmp24_), ((void*)0))))
;
54
'?' condition is false
37282 _tmp25_ = function;
37283 bala_ccode_base_module_push_function (self, _tmp25_);
37284 _tmp26_ = bala_semantic_analyzer_get_data_type_for_symbol ((BalaSymbol*) st);
37285 _tmp27_ = _tmp26_;
37286 _tmp28_ = bala_ccode_identifier_new ("(*dest)");
37287 _tmp29_ = _tmp28_;
37288 _tmp30_ = bala_glib_value_new (_tmp27_, (BalaCCodeExpression*) _tmp29_, TRUE(!(0)));
37289 _tmp31_ = _tmp30_;
37290 _bala_ccode_node_unref0 (_tmp29_)((_tmp29_ == ((void*)0)) ? ((void*)0) : (_tmp29_ = (bala_ccode_node_unref
(_tmp29_), ((void*)0))))
;
55
Assuming '_tmp29_' is equal to null
56
'?' condition is true
37291 _bala_code_node_unref0 (_tmp27_)((_tmp27_ == ((void*)0)) ? ((void*)0) : (_tmp27_ = (bala_code_node_unref
(_tmp27_), ((void*)0))))
;
57
Assuming '_tmp27_' is equal to null
58
'?' condition is true
37292 dest_struct = _tmp31_;
37293 {
37294 BalaList* _f_list = NULL((void*)0);
37295 BalaList* _tmp32_;
37296 BalaList* _tmp33_;
37297 gint _f_size = 0;
37298 BalaList* _tmp34_;
37299 gint _tmp35_;
37300 gint _tmp36_;
37301 gint _f_index = 0;
37302 _tmp32_ = bala_struct_get_fields (st);
37303 _tmp33_ = _bala_iterable_ref0 (_tmp32_);
37304 _f_list = _tmp33_;
37305 _tmp34_ = _f_list;
37306 _tmp35_ = bala_collection_get_size ((BalaCollection*) _tmp34_);
37307 _tmp36_ = _tmp35_;
37308 _f_size = _tmp36_;
37309 _f_index = -1;
37310 while (TRUE(!(0))) {
59
Loop condition is true. Entering loop body
37311 gint _tmp37_;
37312 gint _tmp38_;
37313 BalaField* f = NULL((void*)0);
37314 BalaList* _tmp39_;
37315 gpointer _tmp40_;
37316 BalaField* _tmp41_;
37317 BalaMemberBinding _tmp42_;
37318 BalaMemberBinding _tmp43_;
37319 _f_index = _f_index + 1;
37320 _tmp37_ = _f_index;
37321 _tmp38_ = _f_size;
37322 if (!(_tmp37_ < _tmp38_)) {
60
Assuming '_tmp37_' is >= '_tmp38_'
61
Taking true branch
37323 break;
62
Execution continues on line 37399
37324 }
37325 _tmp39_ = _f_list;
37326 _tmp40_ = bala_list_get (_tmp39_, _f_index);
37327 f = (BalaField*) _tmp40_;
37328 _tmp41_ = f;
37329 _tmp42_ = bala_field_get_binding (_tmp41_);
37330 _tmp43_ = _tmp42_;
37331 if (_tmp43_ == BALA_MEMBER_BINDING_INSTANCE) {
37332 BalaTargetValue* value = NULL((void*)0);
37333 BalaField* _tmp44_;
37334 BalaTargetValue* _tmp45_;
37335 BalaTargetValue* _tmp46_;
37336 BalaTargetValue* _tmp47_;
37337 BalaTargetValue* _tmp48_;
37338 gboolean _tmp49_ = FALSE(0);
37339 gboolean _tmp50_ = FALSE(0);
37340 BalaField* _tmp51_;
37341 BalaDataType* _tmp52_;
37342 BalaDataType* _tmp53_;
37343 BalaField* _tmp62_;
37344 BalaGLibValue* _tmp63_;
37345 BalaTargetValue* _tmp64_;
37346 _tmp44_ = f;
37347 _tmp45_ = bala_ccode_base_module_load_this_parameter (self, G_TYPE_CHECK_INSTANCE_CAST (st, BALA_TYPE_TYPESYMBOL, BalaTypeSymbol)(((BalaTypeSymbol*) g_type_check_instance_cast ((GTypeInstance
*) (st), ((bala_typesymbol_get_type ())))))
);
37348 _tmp46_ = _tmp45_;
37349 _tmp47_ = bala_code_generator_load_field ((BalaCodeGenerator*) self, _tmp44_, _tmp46_, NULL((void*)0));
37350 _tmp48_ = _tmp47_;
37351 _bala_target_value_unref0 (_tmp46_)((_tmp46_ == ((void*)0)) ? ((void*)0) : (_tmp46_ = (bala_target_value_unref
(_tmp46_), ((void*)0))))
;
37352 value = _tmp48_;
37353 _tmp51_ = f;
37354 _tmp52_ = bala_variable_get_variable_type ((BalaVariable*) _tmp51_);
37355 _tmp53_ = _tmp52_;
37356 if (!G_TYPE_CHECK_INSTANCE_TYPE (_tmp53_, BALA_TYPE_DELEGATE_TYPE)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp53_); GType __t = ((bala_delegate_type_get_type ())); gboolean
__r; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
) {
37357 _tmp50_ = TRUE(!(0));
37358 } else {
37359 BalaField* _tmp54_;
37360 _tmp54_ = f;
37361 _tmp50_ = bala_get_ccode_delegate_target ((BalaCodeNode*) _tmp54_);
37362 }
37363 if (_tmp50_) {
37364 BalaField* _tmp55_;
37365 BalaDataType* _tmp56_;
37366 BalaDataType* _tmp57_;
37367 _tmp55_ = f;
37368 _tmp56_ = bala_variable_get_variable_type ((BalaVariable*) _tmp55_);
37369 _tmp57_ = _tmp56_;
37370 _tmp49_ = bala_ccode_base_module_requires_copy (_tmp57_);
37371 } else {
37372 _tmp49_ = FALSE(0);
37373 }
37374 if (_tmp49_) {
37375 BalaTargetValue* _tmp58_;
37376 BalaField* _tmp59_;
37377 BalaTargetValue* _tmp60_;
37378 BalaTargetValue* _tmp61_;
37379 _tmp58_ = value;
37380 _tmp59_ = f;
37381 _tmp60_ = bala_ccode_base_module_copy_value (self, _tmp58_, (BalaCodeNode*) _tmp59_);
37382 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
37383 value = _tmp60_;
37384 _tmp61_ = value;
37385 if (_tmp61_ == NULL((void*)0)) {
37386 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
37387 _bala_code_node_unref0 (f)((f == ((void*)0)) ? ((void*)0) : (f = (bala_code_node_unref (
f), ((void*)0))))
;
37388 continue;
37389 }
37390 }
37391 _tmp62_ = f;
37392 _tmp63_ = dest_struct;
37393 _tmp64_ = value;
37394 bala_code_generator_store_field ((BalaCodeGenerator*) self, _tmp62_, (BalaTargetValue*) _tmp63_, _tmp64_, NULL((void*)0));
37395 _bala_target_value_unref0 (value)((value == ((void*)0)) ? ((void*)0) : (value = (bala_target_value_unref
(value), ((void*)0))))
;
37396 }
37397 _bala_code_node_unref0 (f)((f == ((void*)0)) ? ((void*)0) : (f = (bala_code_node_unref (
f), ((void*)0))))
;
37398 }
37399 _bala_iterable_unref0 (_f_list)((_f_list == ((void*)0)) ? ((void*)0) : (_f_list = (bala_iterable_unref
(_f_list), ((void*)0))))
;
63
'?' condition is true
37400 }
37401 bala_ccode_base_module_pop_function (self);
64
Calling 'bala_ccode_base_module_pop_function'
77
Returning from 'bala_ccode_base_module_pop_function'
37402 bala_ccode_base_module_pop_context (self);
78
Calling 'bala_ccode_base_module_pop_context'
85
Returning from 'bala_ccode_base_module_pop_context'
37403 _tmp65_ = self->cfile;
37404 _tmp66_ = function;
37405 bala_ccode_file_add_function_declaration (_tmp65_, _tmp66_);
37406 _tmp67_ = self->cfile;
37407 _tmp68_ = function;
37408 bala_ccode_file_add_function (_tmp67_, _tmp68_);
37409 _bala_target_value_unref0 (dest_struct)((dest_struct == ((void*)0)) ? ((void*)0) : (dest_struct = (bala_target_value_unref
(dest_struct), ((void*)0))))
;
86
Assuming 'dest_struct' is equal to null
87
'?' condition is true
37410 _bala_ccode_node_unref0 (function)((function == ((void*)0)) ? ((void*)0) : (function = (bala_ccode_node_unref
(function), ((void*)0))))
;
88
Assuming 'function' is equal to null
89
'?' condition is true
37411}
37412
37413void
37414bala_ccode_base_module_return_default_value (BalaCCodeBaseModule* self,
37415 BalaDataType* return_type,
37416 gboolean on_error)
37417{
37418 BalaStruct* st = NULL((void*)0);
37419 BalaTypeSymbol* _tmp0_;
37420 BalaTypeSymbol* _tmp1_;
37421 gboolean _tmp2_ = FALSE(0);
37422 gboolean _tmp3_ = FALSE(0);
37423 BalaStruct* _tmp4_;
37424 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
37425 g_return_if_fail (return_type != NULL)do { if ((return_type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "return_type != NULL"
); return; } } while (0)
;
37426 _tmp0_ = bala_data_type_get_type_symbol (return_type);
37427 _tmp1_ = _tmp0_;
37428 st = G_TYPE_CHECK_INSTANCE_TYPE (_tmp1_, BALA_TYPE_STRUCT)((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) (
_tmp1_); GType __t = ((bala_struct_get_type ())); gboolean __r
; if (!__inst) __r = (0); else if (__inst->g_class &&
__inst->g_class->g_type == __t) __r = (!(0)); else __r
= g_type_check_instance_is_a (__inst, __t); __r; })))
? ((BalaStruct*) _tmp1_) : NULL((void*)0);
37429 _tmp4_ = st;
37430 if (_tmp4_ != NULL((void*)0)) {
37431 BalaStruct* _tmp5_;
37432 _tmp5_ = st;
37433 _tmp3_ = bala_struct_is_simple_type (_tmp5_);
37434 } else {
37435 _tmp3_ = FALSE(0);
37436 }
37437 if (_tmp3_) {
37438 gboolean _tmp6_;
37439 gboolean _tmp7_;
37440 _tmp6_ = bala_data_type_get_nullable (return_type);
37441 _tmp7_ = _tmp6_;
37442 _tmp2_ = !_tmp7_;
37443 } else {
37444 _tmp2_ = FALSE(0);
37445 }
37446 if (_tmp2_) {
37447 BalaLocalVariable* ret_temp_var = NULL((void*)0);
37448 BalaLocalVariable* _tmp8_;
37449 BalaLocalVariable* _tmp9_;
37450 BalaCCodeFunction* _tmp10_;
37451 BalaCCodeFunction* _tmp11_;
37452 BalaLocalVariable* _tmp12_;
37453 const gchar* _tmp13_;
37454 const gchar* _tmp14_;
37455 BalaCCodeIdentifier* _tmp15_;
37456 BalaCCodeIdentifier* _tmp16_;
37457 _tmp8_ = bala_ccode_base_module_get_temp_variable (self, return_type, TRUE(!(0)), NULL((void*)0), TRUE(!(0)));
37458 ret_temp_var = _tmp8_;
37459 _tmp9_ = ret_temp_var;
37460 bala_ccode_base_module_emit_temp_var (self, _tmp9_, on_error);
37461 _tmp10_ = bala_ccode_base_module_get_ccode (self);
37462 _tmp11_ = _tmp10_;
37463 _tmp12_ = ret_temp_var;
37464 _tmp13_ = bala_symbol_get_name ((BalaSymbol*) _tmp12_);
37465 _tmp14_ = _tmp13_;
37466 _tmp15_ = bala_ccode_identifier_new (_tmp14_);
37467 _tmp16_ = _tmp15_;
37468 bala_ccode_function_add_return (_tmp11_, (BalaCCodeExpression*) _tmp16_);
37469 _bala_ccode_node_unref0 (_tmp16_)((_tmp16_ == ((void*)0)) ? ((void*)0) : (_tmp16_ = (bala_ccode_node_unref
(_tmp16_), ((void*)0))))
;
37470 _bala_code_node_unref0 (ret_temp_var)((ret_temp_var == ((void*)0)) ? ((void*)0) : (ret_temp_var = (
bala_code_node_unref (ret_temp_var), ((void*)0))))
;
37471 } else {
37472 BalaCCodeFunction* _tmp17_;
37473 BalaCCodeFunction* _tmp18_;
37474 BalaCCodeExpression* _tmp19_;
37475 BalaCCodeExpression* _tmp20_;
37476 _tmp17_ = bala_ccode_base_module_get_ccode (self);
37477 _tmp18_ = _tmp17_;
37478 _tmp19_ = bala_ccode_base_module_default_value_for_type (self, return_type, FALSE(0), on_error);
37479 _tmp20_ = _tmp19_;
37480 bala_ccode_function_add_return (_tmp18_, _tmp20_);
37481 _bala_ccode_node_unref0 (_tmp20_)((_tmp20_ == ((void*)0)) ? ((void*)0) : (_tmp20_ = (bala_ccode_node_unref
(_tmp20_), ((void*)0))))
;
37482 }
37483}
37484
37485static void
37486bala_ccode_base_module_real_generate_dynamic_method_wrapper (BalaCCodeBaseModule* self,
37487 BalaDynamicMethod* method)
37488{
37489 g_return_if_fail (method != NULL)do { if ((method != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "method != NULL"
); return; } } while (0)
;
37490}
37491
37492void
37493bala_ccode_base_module_generate_dynamic_method_wrapper (BalaCCodeBaseModule* self,
37494 BalaDynamicMethod* method)
37495{
37496 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
37497 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_dynamic_method_wrapper (self, method);
37498}
37499
37500static gboolean
37501bala_ccode_base_module_real_method_has_wrapper (BalaCCodeBaseModule* self,
37502 BalaMethod* method)
37503{
37504 gboolean result = FALSE(0);
37505 g_return_val_if_fail (method != NULL, FALSE)do { if ((method != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "method != NULL"
); return ((0)); } } while (0)
;
37506 result = FALSE(0);
37507 return result;
37508}
37509
37510gboolean
37511bala_ccode_base_module_method_has_wrapper (BalaCCodeBaseModule* self,
37512 BalaMethod* method)
37513{
37514 g_return_val_if_fail (self != NULL, FALSE)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return ((0)); } } while (0)
;
37515 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->method_has_wrapper (self, method);
37516}
37517
37518static BalaCCodeExpression*
37519bala_ccode_base_module_real_get_param_spec_cexpression (BalaCCodeBaseModule* self,
37520 BalaProperty* prop)
37521{
37522 BalaCCodeInvalidExpression* _tmp0_;
37523 BalaCCodeExpression* result = NULL((void*)0);
37524 g_return_val_if_fail (prop != NULL, NULL)do { if ((prop != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "prop != NULL"
); return (((void*)0)); } } while (0)
;
37525 _tmp0_ = bala_ccode_invalid_expression_new ();
37526 result = (BalaCCodeExpression*) _tmp0_;
37527 return result;
37528}
37529
37530BalaCCodeExpression*
37531bala_ccode_base_module_get_param_spec_cexpression (BalaCCodeBaseModule* self,
37532 BalaProperty* prop)
37533{
37534 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37535 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_param_spec_cexpression (self, prop);
37536}
37537
37538static BalaCCodeExpression*
37539bala_ccode_base_module_real_get_param_spec (BalaCCodeBaseModule* self,
37540 BalaProperty* prop)
37541{
37542 BalaCCodeInvalidExpression* _tmp0_;
37543 BalaCCodeExpression* result = NULL((void*)0);
37544 g_return_val_if_fail (prop != NULL, NULL)do { if ((prop != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "prop != NULL"
); return (((void*)0)); } } while (0)
;
37545 _tmp0_ = bala_ccode_invalid_expression_new ();
37546 result = (BalaCCodeExpression*) _tmp0_;
37547 return result;
37548}
37549
37550BalaCCodeExpression*
37551bala_ccode_base_module_get_param_spec (BalaCCodeBaseModule* self,
37552 BalaProperty* prop)
37553{
37554 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37555 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_param_spec (self, prop);
37556}
37557
37558static BalaCCodeExpression*
37559bala_ccode_base_module_real_get_signal_creation (BalaCCodeBaseModule* self,
37560 BalaSignal* sig,
37561 BalaObjectTypeSymbol* type)
37562{
37563 BalaCCodeInvalidExpression* _tmp0_;
37564 BalaCCodeExpression* result = NULL((void*)0);
37565 g_return_val_if_fail (sig != NULL, NULL)do { if ((sig != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "sig != NULL")
; return (((void*)0)); } } while (0)
;
37566 g_return_val_if_fail (type != NULL, NULL)do { if ((type != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type != NULL"
); return (((void*)0)); } } while (0)
;
37567 _tmp0_ = bala_ccode_invalid_expression_new ();
37568 result = (BalaCCodeExpression*) _tmp0_;
37569 return result;
37570}
37571
37572BalaCCodeExpression*
37573bala_ccode_base_module_get_signal_creation (BalaCCodeBaseModule* self,
37574 BalaSignal* sig,
37575 BalaObjectTypeSymbol* type)
37576{
37577 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37578 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_signal_creation (self, sig, type);
37579}
37580
37581static BalaCCodeExpression*
37582bala_ccode_base_module_real_get_value_getter_function (BalaCCodeBaseModule* self,
37583 BalaDataType* type_reference)
37584{
37585 BalaCCodeInvalidExpression* _tmp0_;
37586 BalaCCodeExpression* result = NULL((void*)0);
37587 g_return_val_if_fail (type_reference != NULL, NULL)do { if ((type_reference != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type_reference != NULL"
); return (((void*)0)); } } while (0)
;
37588 _tmp0_ = bala_ccode_invalid_expression_new ();
37589 result = (BalaCCodeExpression*) _tmp0_;
37590 return result;
37591}
37592
37593BalaCCodeExpression*
37594bala_ccode_base_module_get_value_getter_function (BalaCCodeBaseModule* self,
37595 BalaDataType* type_reference)
37596{
37597 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37598 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_value_getter_function (self, type_reference);
37599}
37600
37601static BalaCCodeExpression*
37602bala_ccode_base_module_real_get_value_setter_function (BalaCCodeBaseModule* self,
37603 BalaDataType* type_reference)
37604{
37605 BalaCCodeInvalidExpression* _tmp0_;
37606 BalaCCodeExpression* result = NULL((void*)0);
37607 g_return_val_if_fail (type_reference != NULL, NULL)do { if ((type_reference != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type_reference != NULL"
); return (((void*)0)); } } while (0)
;
37608 _tmp0_ = bala_ccode_invalid_expression_new ();
37609 result = (BalaCCodeExpression*) _tmp0_;
37610 return result;
37611}
37612
37613BalaCCodeExpression*
37614bala_ccode_base_module_get_value_setter_function (BalaCCodeBaseModule* self,
37615 BalaDataType* type_reference)
37616{
37617 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37618 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_value_setter_function (self, type_reference);
37619}
37620
37621static BalaCCodeExpression*
37622bala_ccode_base_module_real_get_value_taker_function (BalaCCodeBaseModule* self,
37623 BalaDataType* type_reference)
37624{
37625 BalaCCodeInvalidExpression* _tmp0_;
37626 BalaCCodeExpression* result = NULL((void*)0);
37627 g_return_val_if_fail (type_reference != NULL, NULL)do { if ((type_reference != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "type_reference != NULL"
); return (((void*)0)); } } while (0)
;
37628 _tmp0_ = bala_ccode_invalid_expression_new ();
37629 result = (BalaCCodeExpression*) _tmp0_;
37630 return result;
37631}
37632
37633BalaCCodeExpression*
37634bala_ccode_base_module_get_value_taker_function (BalaCCodeBaseModule* self,
37635 BalaDataType* type_reference)
37636{
37637 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37638 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_value_taker_function (self, type_reference);
37639}
37640
37641static void
37642bala_ccode_base_module_real_register_dbus_info (BalaCCodeBaseModule* self,
37643 BalaCCodeBlock* block,
37644 BalaObjectTypeSymbol* bindable)
37645{
37646 g_return_if_fail (block != NULL)do { if ((block != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "block != NULL"
); return; } } while (0)
;
37647 g_return_if_fail (bindable != NULL)do { if ((bindable != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "bindable != NULL"
); return; } } while (0)
;
37648}
37649
37650void
37651bala_ccode_base_module_register_dbus_info (BalaCCodeBaseModule* self,
37652 BalaCCodeBlock* block,
37653 BalaObjectTypeSymbol* bindable)
37654{
37655 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
37656 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->register_dbus_info (self, block, bindable);
37657}
37658
37659static gchar*
37660bala_ccode_base_module_real_get_dynamic_property_getter_cname (BalaCCodeBaseModule* self,
37661 BalaDynamicProperty* node)
37662{
37663 BalaSourceReference* _tmp0_;
37664 BalaSourceReference* _tmp1_;
37665 BalaDataType* _tmp2_;
37666 BalaDataType* _tmp3_;
37667 gchar* _tmp4_;
37668 gchar* _tmp5_;
37669 gchar* _tmp6_;
37670 gchar* _tmp7_;
37671 gchar* _tmp8_;
37672 gchar* result = NULL((void*)0);
37673 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
37674 _tmp0_ = bala_code_node_get_source_reference ((BalaCodeNode*) node);
37675 _tmp1_ = _tmp0_;
37676 _tmp2_ = bala_dynamic_property_get_dynamic_type (node);
37677 _tmp3_ = _tmp2_;
37678 _tmp4_ = bala_code_node_to_string ((BalaCodeNode*) _tmp3_);
37679 _tmp5_ = _tmp4_;
37680 _tmp6_ = g_strdup_printf ("dynamic properties are not supported for %s", _tmp5_);
37681 _tmp7_ = _tmp6_;
37682 bala_report_error (_tmp1_, _tmp7_);
37683 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
37684 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
37685 _tmp8_ = g_strdup ("");
37686 result = _tmp8_;
37687 return result;
37688}
37689
37690gchar*
37691bala_ccode_base_module_get_dynamic_property_getter_cname (BalaCCodeBaseModule* self,
37692 BalaDynamicProperty* node)
37693{
37694 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37695 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_dynamic_property_getter_cname (self, node);
37696}
37697
37698static gchar*
37699bala_ccode_base_module_real_get_dynamic_property_setter_cname (BalaCCodeBaseModule* self,
37700 BalaDynamicProperty* node)
37701{
37702 BalaSourceReference* _tmp0_;
37703 BalaSourceReference* _tmp1_;
37704 BalaDataType* _tmp2_;
37705 BalaDataType* _tmp3_;
37706 gchar* _tmp4_;
37707 gchar* _tmp5_;
37708 gchar* _tmp6_;
37709 gchar* _tmp7_;
37710 gchar* _tmp8_;
37711 gchar* result = NULL((void*)0);
37712 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
37713 _tmp0_ = bala_code_node_get_source_reference ((BalaCodeNode*) node);
37714 _tmp1_ = _tmp0_;
37715 _tmp2_ = bala_dynamic_property_get_dynamic_type (node);
37716 _tmp3_ = _tmp2_;
37717 _tmp4_ = bala_code_node_to_string ((BalaCodeNode*) _tmp3_);
37718 _tmp5_ = _tmp4_;
37719 _tmp6_ = g_strdup_printf ("dynamic properties are not supported for %s", _tmp5_);
37720 _tmp7_ = _tmp6_;
37721 bala_report_error (_tmp1_, _tmp7_);
37722 _g_free0 (_tmp7_)(_tmp7_ = (g_free (_tmp7_), ((void*)0)));
37723 _g_free0 (_tmp5_)(_tmp5_ = (g_free (_tmp5_), ((void*)0)));
37724 _tmp8_ = g_strdup ("");
37725 result = _tmp8_;
37726 return result;
37727}
37728
37729gchar*
37730bala_ccode_base_module_get_dynamic_property_setter_cname (BalaCCodeBaseModule* self,
37731 BalaDynamicProperty* node)
37732{
37733 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37734 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_dynamic_property_setter_cname (self, node);
37735}
37736
37737static gchar*
37738bala_ccode_base_module_real_get_dynamic_signal_cname (BalaCCodeBaseModule* self,
37739 BalaDynamicSignal* node)
37740{
37741 gchar* _tmp0_;
37742 gchar* result = NULL((void*)0);
37743 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
37744 _tmp0_ = g_strdup ("");
37745 result = _tmp0_;
37746 return result;
37747}
37748
37749gchar*
37750bala_ccode_base_module_get_dynamic_signal_cname (BalaCCodeBaseModule* self,
37751 BalaDynamicSignal* node)
37752{
37753 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37754 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_dynamic_signal_cname (self, node);
37755}
37756
37757static gchar*
37758bala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name (BalaCCodeBaseModule* self,
37759 BalaDynamicSignal* node)
37760{
37761 gchar* _tmp0_;
37762 gchar* result = NULL((void*)0);
37763 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
37764 _tmp0_ = g_strdup ("");
37765 result = _tmp0_;
37766 return result;
37767}
37768
37769gchar*
37770bala_ccode_base_module_get_dynamic_signal_connect_wrapper_name (BalaCCodeBaseModule* self,
37771 BalaDynamicSignal* node)
37772{
37773 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37774 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_dynamic_signal_connect_wrapper_name (self, node);
37775}
37776
37777static gchar*
37778bala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name (BalaCCodeBaseModule* self,
37779 BalaDynamicSignal* node)
37780{
37781 gchar* _tmp0_;
37782 gchar* result = NULL((void*)0);
37783 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
37784 _tmp0_ = g_strdup ("");
37785 result = _tmp0_;
37786 return result;
37787}
37788
37789gchar*
37790bala_ccode_base_module_get_dynamic_signal_connect_after_wrapper_name (BalaCCodeBaseModule* self,
37791 BalaDynamicSignal* node)
37792{
37793 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37794 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_dynamic_signal_connect_after_wrapper_name (self, node);
37795}
37796
37797static gchar*
37798bala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name (BalaCCodeBaseModule* self,
37799 BalaDynamicSignal* node)
37800{
37801 gchar* _tmp0_;
37802 gchar* result = NULL((void*)0);
37803 g_return_val_if_fail (node != NULL, NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return (((void*)0)); } } while (0)
;
37804 _tmp0_ = g_strdup ("");
37805 result = _tmp0_;
37806 return result;
37807}
37808
37809gchar*
37810bala_ccode_base_module_get_dynamic_signal_disconnect_wrapper_name (BalaCCodeBaseModule* self,
37811 BalaDynamicSignal* node)
37812{
37813 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37814 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_dynamic_signal_disconnect_wrapper_name (self, node);
37815}
37816
37817static gchar*
37818bala_ccode_base_module_real_get_array_length_cname (BalaCCodeBaseModule* self,
37819 const gchar* array_cname,
37820 gint dim)
37821{
37822 gchar* _tmp0_;
37823 gchar* result = NULL((void*)0);
37824 g_return_val_if_fail (array_cname != NULL, NULL)do { if ((array_cname != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "array_cname != NULL"
); return (((void*)0)); } } while (0)
;
37825 _tmp0_ = g_strdup ("");
37826 result = _tmp0_;
37827 return result;
37828}
37829
37830gchar*
37831bala_ccode_base_module_get_array_length_cname (BalaCCodeBaseModule* self,
37832 const gchar* array_cname,
37833 gint dim)
37834{
37835 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37836 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_array_length_cname (self, array_cname, dim);
37837}
37838
37839static gchar*
37840bala_ccode_base_module_real_get_variable_array_length_cname (BalaCCodeBaseModule* self,
37841 BalaVariable* variable,
37842 gint dim)
37843{
37844 gchar* _tmp0_;
37845 gchar* result = NULL((void*)0);
37846 g_return_val_if_fail (variable != NULL, NULL)do { if ((variable != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "variable != NULL"
); return (((void*)0)); } } while (0)
;
37847 _tmp0_ = g_strdup ("");
37848 result = _tmp0_;
37849 return result;
37850}
37851
37852gchar*
37853bala_ccode_base_module_get_variable_array_length_cname (BalaCCodeBaseModule* self,
37854 BalaVariable* variable,
37855 gint dim)
37856{
37857 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37858 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_variable_array_length_cname (self, variable, dim);
37859}
37860
37861static BalaCCodeExpression*
37862bala_ccode_base_module_real_get_array_length_cexpression (BalaCCodeBaseModule* self,
37863 BalaExpression* array_expr,
37864 gint dim)
37865{
37866 BalaCCodeInvalidExpression* _tmp0_;
37867 BalaCCodeExpression* result = NULL((void*)0);
37868 g_return_val_if_fail (array_expr != NULL, NULL)do { if ((array_expr != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "array_expr != NULL"
); return (((void*)0)); } } while (0)
;
37869 _tmp0_ = bala_ccode_invalid_expression_new ();
37870 result = (BalaCCodeExpression*) _tmp0_;
37871 return result;
37872}
37873
37874BalaCCodeExpression*
37875bala_ccode_base_module_get_array_length_cexpression (BalaCCodeBaseModule* self,
37876 BalaExpression* array_expr,
37877 gint dim)
37878{
37879 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37880 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_array_length_cexpression (self, array_expr, dim);
37881}
37882
37883static BalaCCodeExpression*
37884bala_ccode_base_module_real_get_array_length_cvalue (BalaCCodeBaseModule* self,
37885 BalaTargetValue* value,
37886 gint dim)
37887{
37888 BalaCCodeInvalidExpression* _tmp0_;
37889 BalaCCodeExpression* result = NULL((void*)0);
37890 g_return_val_if_fail (value != NULL, NULL)do { if ((value != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "value != NULL"
); return (((void*)0)); } } while (0)
;
37891 _tmp0_ = bala_ccode_invalid_expression_new ();
37892 result = (BalaCCodeExpression*) _tmp0_;
37893 return result;
37894}
37895
37896BalaCCodeExpression*
37897bala_ccode_base_module_get_array_length_cvalue (BalaCCodeBaseModule* self,
37898 BalaTargetValue* value,
37899 gint dim)
37900{
37901 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37902 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_array_length_cvalue (self, value, dim);
37903}
37904
37905static gchar*
37906bala_ccode_base_module_real_get_array_size_cname (BalaCCodeBaseModule* self,
37907 const gchar* array_cname)
37908{
37909 gchar* _tmp0_;
37910 gchar* result = NULL((void*)0);
37911 g_return_val_if_fail (array_cname != NULL, NULL)do { if ((array_cname != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "array_cname != NULL"
); return (((void*)0)); } } while (0)
;
37912 _tmp0_ = g_strdup ("");
37913 result = _tmp0_;
37914 return result;
37915}
37916
37917gchar*
37918bala_ccode_base_module_get_array_size_cname (BalaCCodeBaseModule* self,
37919 const gchar* array_cname)
37920{
37921 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37922 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->get_array_size_cname (self, array_cname);
37923}
37924
37925static void
37926bala_ccode_base_module_real_add_simple_check (BalaCCodeBaseModule* self,
37927 BalaCodeNode* node,
37928 gboolean always_fails)
37929{
37930 g_return_if_fail (node != NULL)do { if ((node != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "node != NULL"
); return; } } while (0)
;
37931}
37932
37933void
37934bala_ccode_base_module_add_simple_check (BalaCCodeBaseModule* self,
37935 BalaCodeNode* node,
37936 gboolean always_fails)
37937{
37938 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
37939 BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->add_simple_check (self, node, always_fails);
37940}
37941
37942static gchar*
37943bala_ccode_base_module_real_generate_ready_function (BalaCCodeBaseModule* self,
37944 BalaMethod* m)
37945{
37946 gchar* _tmp0_;
37947 gchar* result = NULL((void*)0);
37948 g_return_val_if_fail (m != NULL, NULL)do { if ((m != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "m != NULL"); return
(((void*)0)); } } while (0)
;
37949 _tmp0_ = g_strdup ("");
37950 result = _tmp0_;
37951 return result;
37952}
37953
37954gchar*
37955bala_ccode_base_module_generate_ready_function (BalaCCodeBaseModule* self,
37956 BalaMethod* m)
37957{
37958 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37959 return BALA_CCODE_BASE_MODULE_GET_CLASS (self)((((BalaCCodeBaseModuleClass*) (((GTypeInstance*) ((self)))->
g_class))))
->generate_ready_function (self, m);
37960}
37961
37962BalaCCodeExpression*
37963bala_ccode_base_module_get_boolean_cconstant (BalaCCodeBaseModule* self,
37964 gboolean b)
37965{
37966 BalaCodeContext* _tmp0_;
37967 BalaProfile _tmp1_;
37968 BalaProfile _tmp2_;
37969 BalaCCodeExpression* result = NULL((void*)0);
37970 g_return_val_if_fail (self != NULL, NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return (((void*)0)); } } while (0)
;
37971 _tmp0_ = self->priv->_context;
37972 _tmp1_ = bala_code_context_get_profile (_tmp0_);
37973 _tmp2_ = _tmp1_;
37974 if (_tmp2_ == BALA_PROFILE_GOBJECT) {
37975 const gchar* _tmp3_ = NULL((void*)0);
37976 BalaCCodeConstant* _tmp4_;
37977 if (b) {
37978 _tmp3_ = "TRUE";
37979 } else {
37980 _tmp3_ = "FALSE";
37981 }
37982 _tmp4_ = bala_ccode_constant_new (_tmp3_);
37983 result = (BalaCCodeExpression*) _tmp4_;
37984 return result;
37985 } else {
37986 BalaCCodeFile* _tmp5_;
37987 const gchar* _tmp6_ = NULL((void*)0);
37988 BalaCCodeConstant* _tmp7_;
37989 _tmp5_ = self->cfile;
37990 bala_ccode_file_add_include (_tmp5_, "stdbool.h", FALSE(0));
37991 if (b) {
37992 _tmp6_ = "true";
37993 } else {
37994 _tmp6_ = "false";
37995 }
37996 _tmp7_ = bala_ccode_constant_new (_tmp6_);
37997 result = (BalaCCodeExpression*) _tmp7_;
37998 return result;
37999 }
38000}
38001
38002BalaCCodeBaseModuleEmitContext*
38003bala_ccode_base_module_emit_context_construct (GType object_type,
38004 BalaSymbol* symbol)
38005{
38006 BalaCCodeBaseModuleEmitContext* self = NULL((void*)0);
38007 BalaSymbol* _tmp0_;
38008 self = (BalaCCodeBaseModuleEmitContext*) g_type_create_instance (object_type);
38009 _tmp0_ = _bala_code_node_ref0 (symbol);
38010 _bala_code_node_unref0 (self->current_symbol)((self->current_symbol == ((void*)0)) ? ((void*)0) : (self
->current_symbol = (bala_code_node_unref (self->current_symbol
), ((void*)0))))
;
38011 self->current_symbol = _tmp0_;
38012 return self;
38013}
38014
38015BalaCCodeBaseModuleEmitContext*
38016bala_ccode_base_module_emit_context_new (BalaSymbol* symbol)
38017{
38018 return bala_ccode_base_module_emit_context_construct (BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT(bala_ccode_base_module_emit_context_get_type ()), symbol);
38019}
38020
38021void
38022bala_ccode_base_module_emit_context_push_symbol (BalaCCodeBaseModuleEmitContext* self,
38023 BalaSymbol* symbol)
38024{
38025 BalaArrayList* _tmp0_;
38026 BalaSymbol* _tmp1_;
38027 BalaSymbol* _tmp2_;
38028 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
38029 g_return_if_fail (symbol != NULL)do { if ((symbol != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "symbol != NULL"
); return; } } while (0)
;
38030 _tmp0_ = self->symbol_stack;
38031 _tmp1_ = self->current_symbol;
38032 bala_collection_add ((BalaCollection*) _tmp0_, _tmp1_);
38033 _tmp2_ = _bala_code_node_ref0 (symbol);
38034 _bala_code_node_unref0 (self->current_symbol)((self->current_symbol == ((void*)0)) ? ((void*)0) : (self
->current_symbol = (bala_code_node_unref (self->current_symbol
), ((void*)0))))
;
38035 self->current_symbol = _tmp2_;
38036}
38037
38038void
38039bala_ccode_base_module_emit_context_pop_symbol (BalaCCodeBaseModuleEmitContext* self)
38040{
38041 BalaArrayList* _tmp0_;
38042 BalaArrayList* _tmp1_;
38043 gint _tmp2_;
38044 gint _tmp3_;
38045 gpointer _tmp4_;
38046 g_return_if_fail (self != NULL)do { if ((self != ((void*)0))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "self != NULL"
); return; } } while (0)
;
38047 _tmp0_ = self->symbol_stack;
38048 _tmp1_ = self->symbol_stack;
38049 _tmp2_ = bala_collection_get_size ((BalaCollection*) _tmp1_);
38050 _tmp3_ = _tmp2_;
38051 _tmp4_ = bala_list_remove_at ((BalaList*) _tmp0_, _tmp3_ - 1);
38052 _bala_code_node_unref0 (self->current_symbol)((self->current_symbol == ((void*)0)) ? ((void*)0) : (self
->current_symbol = (bala_code_node_unref (self->current_symbol
), ((void*)0))))
;
38053 self->current_symbol = (BalaSymbol*) _tmp4_;
38054}
38055
38056static void
38057bala_ccode_base_module_value_emit_context_init (GValue* value)
38058{
38059 value->data[0].v_pointer = NULL((void*)0);
38060}
38061
38062static void
38063bala_ccode_base_module_value_emit_context_free_value (GValue* value)
38064{
38065 if (value->data[0].v_pointer) {
38066 bala_ccode_base_module_emit_context_unref (value->data[0].v_pointer);
38067 }
38068}
38069
38070static void
38071bala_ccode_base_module_value_emit_context_copy_value (const GValue* src_value,
38072 GValue* dest_value)
38073{
38074 if (src_value->data[0].v_pointer) {
38075 dest_value->data[0].v_pointer = bala_ccode_base_module_emit_context_ref (src_value->data[0].v_pointer);
38076 } else {
38077 dest_value->data[0].v_pointer = NULL((void*)0);
38078 }
38079}
38080
38081static gpointer
38082bala_ccode_base_module_value_emit_context_peek_pointer (const GValue* value)
38083{
38084 return value->data[0].v_pointer;
38085}
38086
38087static gchar*
38088bala_ccode_base_module_value_emit_context_collect_value (GValue* value,
38089 guint n_collect_values,
38090 GTypeCValue* collect_values,
38091 guint collect_flags)
38092{
38093 if (collect_values[0].v_pointer) {
38094 BalaCCodeBaseModuleEmitContext * object;
38095 object = collect_values[0].v_pointer;
38096 if (object->parent_instance.g_class == NULL((void*)0)) {
38097 return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value)(g_type_name ((((GValue*) (value))->g_type))), "'", NULL((void*)0));
38098 } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object)((((GTypeClass*) (((GTypeInstance*) (object))->g_class))->
g_type))
, G_VALUE_TYPE (value)(((GValue*) (value))->g_type))) {
38099 return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)((((GTypeClass*) (((GTypeInstance*) (object))->g_class))->
g_type))
), "' for value type `", G_VALUE_TYPE_NAME (value)(g_type_name ((((GValue*) (value))->g_type))), "'", NULL((void*)0));
38100 }
38101 value->data[0].v_pointer = bala_ccode_base_module_emit_context_ref (object);
38102 } else {
38103 value->data[0].v_pointer = NULL((void*)0);
38104 }
38105 return NULL((void*)0);
38106}
38107
38108static gchar*
38109bala_ccode_base_module_value_emit_context_lcopy_value (const GValue* value,
38110 guint n_collect_values,
38111 GTypeCValue* collect_values,
38112 guint collect_flags)
38113{
38114 BalaCCodeBaseModuleEmitContext ** object_p;
38115 object_p = collect_values[0].v_pointer;
38116 if (!object_p) {
38117 return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)(g_type_name ((((GValue*) (value))->g_type))));
38118 }
38119 if (!value->data[0].v_pointer) {
38120 *object_p = NULL((void*)0);
38121 } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS(1 << 27)) {
38122 *object_p = value->data[0].v_pointer;
38123 } else {
38124 *object_p = bala_ccode_base_module_emit_context_ref (value->data[0].v_pointer);
38125 }
38126 return NULL((void*)0);
38127}
38128
38129GParamSpec*
38130bala_ccode_base_module_param_spec_emit_context (const gchar* name,
38131 const gchar* nick,
38132 const gchar* blurb,
38133 GType object_type,
38134 GParamFlags flags)
38135{
38136 BalaCCodeBaseModuleParamSpecEmitContext* spec;
38137 g_return_val_if_fail (g_type_is_a (object_type, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT), NULL)do { if ((g_type_is_a (object_type, (bala_ccode_base_module_emit_context_get_type
())))) { } else { g_return_if_fail_warning ("bala-ccodegen",
((const char*) (__func__)), "g_type_is_a (object_type, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT)"
); return (((void*)0)); } } while (0)
;
38138 spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT(g_param_spec_types[19]), name, nick, blurb, flags);
38139 G_PARAM_SPEC (spec)((((GParamSpec*) g_type_check_instance_cast ((GTypeInstance*)
((spec)), (((GType) ((19) << (2))))))))
->value_type = object_type;
38140 return G_PARAM_SPEC (spec)((((GParamSpec*) g_type_check_instance_cast ((GTypeInstance*)
((spec)), (((GType) ((19) << (2))))))))
;
38141}
38142
38143gpointer
38144bala_ccode_base_module_value_get_emit_context (const GValue* value)
38145{
38146 g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT), NULL)do { if ((((__extension__ ({ const GValue *__val = (const GValue
*) (value); GType __t = ((bala_ccode_base_module_emit_context_get_type
())); gboolean __r; if (!__val) __r = (0); else if (__val->
g_type == __t) __r = (!(0)); else __r = g_type_check_value_holds
(__val, __t); __r; }))))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "G_TYPE_CHECK_VALUE_TYPE (value, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT)"
); return (((void*)0)); } } while (0)
;
38147 return value->data[0].v_pointer;
38148}
38149
38150void
38151bala_ccode_base_module_value_set_emit_context (GValue* value,
38152 gpointer v_object)
38153{
38154 BalaCCodeBaseModuleEmitContext * old;
38155 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT))do { if ((((__extension__ ({ const GValue *__val = (const GValue
*) (value); GType __t = ((bala_ccode_base_module_emit_context_get_type
())); gboolean __r; if (!__val) __r = (0); else if (__val->
g_type == __t) __r = (!(0)); else __r = g_type_check_value_holds
(__val, __t); __r; }))))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "G_TYPE_CHECK_VALUE_TYPE (value, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT)"
); return; } } while (0)
;
38156 old = value->data[0].v_pointer;
38157 if (v_object) {
38158 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT))do { if ((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (v_object); GType __t = ((bala_ccode_base_module_emit_context_get_type
())); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; }))))) { } else { g_return_if_fail_warning ("bala-ccodegen"
, ((const char*) (__func__)), "G_TYPE_CHECK_INSTANCE_TYPE (v_object, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT)"
); return; } } while (0)
;
38159 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)))do { if ((g_value_type_compatible (((((GTypeClass*) (((GTypeInstance
*) (v_object))->g_class))->g_type)), (((GValue*) (value
))->g_type)))) { } else { g_return_if_fail_warning ("bala-ccodegen"
, ((const char*) (__func__)), "g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))"
); return; } } while (0)
;
38160 value->data[0].v_pointer = v_object;
38161 bala_ccode_base_module_emit_context_ref (value->data[0].v_pointer);
38162 } else {
38163 value->data[0].v_pointer = NULL((void*)0);
38164 }
38165 if (old) {
38166 bala_ccode_base_module_emit_context_unref (old);
38167 }
38168}
38169
38170void
38171bala_ccode_base_module_value_take_emit_context (GValue* value,
38172 gpointer v_object)
38173{
38174 BalaCCodeBaseModuleEmitContext * old;
38175 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT))do { if ((((__extension__ ({ const GValue *__val = (const GValue
*) (value); GType __t = ((bala_ccode_base_module_emit_context_get_type
())); gboolean __r; if (!__val) __r = (0); else if (__val->
g_type == __t) __r = (!(0)); else __r = g_type_check_value_holds
(__val, __t); __r; }))))) { } else { g_return_if_fail_warning
("bala-ccodegen", ((const char*) (__func__)), "G_TYPE_CHECK_VALUE_TYPE (value, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT)"
); return; } } while (0)
;
38176 old = value->data[0].v_pointer;
38177 if (v_object) {
38178 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT))do { if ((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance
*) (v_object); GType __t = ((bala_ccode_base_module_emit_context_get_type
())); gboolean __r; if (!__inst) __r = (0); else if (__inst->
g_class && __inst->g_class->g_type == __t) __r =
(!(0)); else __r = g_type_check_instance_is_a (__inst, __t);
__r; }))))) { } else { g_return_if_fail_warning ("bala-ccodegen"
, ((const char*) (__func__)), "G_TYPE_CHECK_INSTANCE_TYPE (v_object, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT)"
); return; } } while (0)
;
38179 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)))do { if ((g_value_type_compatible (((((GTypeClass*) (((GTypeInstance
*) (v_object))->g_class))->g_type)), (((GValue*) (value
))->g_type)))) { } else { g_return_if_fail_warning ("bala-ccodegen"
, ((const char*) (__func__)), "g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))"
); return; } } while (0)
;
38180 value->data[0].v_pointer = v_object;
38181 } else {
38182 value->data[0].v_pointer = NULL((void*)0);
38183 }
38184 if (old) {
38185 bala_ccode_base_module_emit_context_unref (old);
38186 }
38187}
38188
38189static void
38190bala_ccode_base_module_emit_context_class_init (BalaCCodeBaseModuleEmitContextClass * klass,
38191 gpointer klass_data)
38192{
38193 bala_ccode_base_module_emit_context_parent_class = g_type_class_peek_parent (klass);
38194 ((BalaCCodeBaseModuleEmitContextClass *) klass)->finalize = bala_ccode_base_module_emit_context_finalize;
38195}
38196
38197static void
38198bala_ccode_base_module_emit_context_instance_init (BalaCCodeBaseModuleEmitContext * self,
38199 gpointer klass)
38200{
38201 GEqualFunc _tmp0_;
38202 BalaArrayList* _tmp1_;
38203 GEqualFunc _tmp2_;
38204 BalaArrayList* _tmp3_;
38205 GEqualFunc _tmp4_;
38206 BalaArrayList* _tmp5_;
38207 GHashFunc _tmp6_;
38208 GEqualFunc _tmp7_;
38209 GEqualFunc _tmp8_;
38210 BalaHashMap* _tmp9_;
38211 GHashFunc _tmp10_;
38212 GEqualFunc _tmp11_;
38213 GEqualFunc _tmp12_;
38214 BalaHashMap* _tmp13_;
38215 GHashFunc _tmp14_;
38216 GEqualFunc _tmp15_;
38217 GEqualFunc _tmp16_;
38218 BalaHashMap* _tmp17_;
38219 _tmp0_ = g_direct_equal;
38220 _tmp1_ = bala_array_list_new (BALA_TYPE_SYMBOL(bala_symbol_get_type ()), (GBoxedCopyFunc) bala_code_node_ref, (GDestroyNotify) bala_code_node_unref, _tmp0_);
38221 self->symbol_stack = _tmp1_;
38222 _tmp2_ = g_direct_equal;
38223 _tmp3_ = bala_array_list_new (BALA_TYPE_CCODE_FUNCTION(bala_ccode_function_get_type ()), (GBoxedCopyFunc) bala_ccode_node_ref, (GDestroyNotify) bala_ccode_node_unref, _tmp2_);
38224 self->ccode_stack = _tmp3_;
38225 _tmp4_ = g_direct_equal;
38226 _tmp5_ = bala_array_list_new (BALA_TYPE_TARGET_VALUE(bala_target_value_get_type ()), (GBoxedCopyFunc) bala_target_value_ref, (GDestroyNotify) bala_target_value_unref, _tmp4_);
38227 self->temp_ref_values = _tmp5_;
38228 self->next_coroutine_state = 1;
38229 _tmp6_ = g_str_hash;
38230 _tmp7_ = g_str_equal;
38231 _tmp8_ = g_direct_equal;
38232 _tmp9_ = bala_hash_map_new (G_TYPE_STRING((GType) ((16) << (2))), (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, G_TYPE_STRING((GType) ((16) << (2))), (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, _tmp6_, _tmp7_, _tmp8_);
38233 self->variable_name_map = (BalaMap*) _tmp9_;
38234 _tmp10_ = g_str_hash;
38235 _tmp11_ = g_str_equal;
38236 _tmp12_ = g_direct_equal;
38237 _tmp13_ = bala_hash_map_new (G_TYPE_STRING((GType) ((16) << (2))), (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, G_TYPE_INT((GType) ((6) << (2))), NULL((void*)0), NULL((void*)0), _tmp10_, _tmp11_, _tmp12_);
38238 self->closure_variable_count_map = (BalaMap*) _tmp13_;
38239 _tmp14_ = g_direct_hash;
38240 _tmp15_ = g_direct_equal;
38241 _tmp16_ = g_direct_equal;
38242 _tmp17_ = bala_hash_map_new (BALA_TYPE_LOCAL_VARIABLE(bala_local_variable_get_type ()), (GBoxedCopyFunc) bala_code_node_ref, (GDestroyNotify) bala_code_node_unref, G_TYPE_INT((GType) ((6) << (2))), NULL((void*)0), NULL((void*)0), _tmp14_, _tmp15_, _tmp16_);
38243 self->closure_variable_clash_map = (BalaMap*) _tmp17_;
38244 self->ref_count = 1;
38245}
38246
38247static void
38248bala_ccode_base_module_emit_context_finalize (BalaCCodeBaseModuleEmitContext * obj)
38249{
38250 BalaCCodeBaseModuleEmitContext * self;
38251 self = G_TYPE_CHECK_INSTANCE_CAST (obj, BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT, BalaCCodeBaseModuleEmitContext)(((BalaCCodeBaseModuleEmitContext*) g_type_check_instance_cast
((GTypeInstance*) (obj), ((bala_ccode_base_module_emit_context_get_type
())))))
;
38252 g_signal_handlers_destroy (self);
38253 _bala_code_node_unref0 (self->current_symbol)((self->current_symbol == ((void*)0)) ? ((void*)0) : (self
->current_symbol = (bala_code_node_unref (self->current_symbol
), ((void*)0))))
;
38254 _bala_iterable_unref0 (self->symbol_stack)((self->symbol_stack == ((void*)0)) ? ((void*)0) : (self->
symbol_stack = (bala_iterable_unref (self->symbol_stack), (
(void*)0))))
;
38255 _bala_code_node_unref0 (self->current_try)((self->current_try == ((void*)0)) ? ((void*)0) : (self->
current_try = (bala_code_node_unref (self->current_try), (
(void*)0))))
;
38256 _bala_code_node_unref0 (self->current_catch)((self->current_catch == ((void*)0)) ? ((void*)0) : (self->
current_catch = (bala_code_node_unref (self->current_catch
), ((void*)0))))
;
38257 _bala_ccode_node_unref0 (self->ccode)((self->ccode == ((void*)0)) ? ((void*)0) : (self->ccode
= (bala_ccode_node_unref (self->ccode), ((void*)0))))
;
38258 _bala_iterable_unref0 (self->ccode_stack)((self->ccode_stack == ((void*)0)) ? ((void*)0) : (self->
ccode_stack = (bala_iterable_unref (self->ccode_stack), ((
void*)0))))
;
38259 _bala_iterable_unref0 (self->temp_ref_values)((self->temp_ref_values == ((void*)0)) ? ((void*)0) : (self
->temp_ref_values = (bala_iterable_unref (self->temp_ref_values
), ((void*)0))))
;
38260 _bala_map_unref0 (self->variable_name_map)((self->variable_name_map == ((void*)0)) ? ((void*)0) : (self
->variable_name_map = (bala_map_unref (self->variable_name_map
), ((void*)0))))
;
38261 _bala_map_unref0 (self->closure_variable_count_map)((self->closure_variable_count_map == ((void*)0)) ? ((void
*)0) : (self->closure_variable_count_map = (bala_map_unref
(self->closure_variable_count_map), ((void*)0))))
;
38262 _bala_map_unref0 (self->closure_variable_clash_map)((self->closure_variable_clash_map == ((void*)0)) ? ((void
*)0) : (self->closure_variable_clash_map = (bala_map_unref
(self->closure_variable_clash_map), ((void*)0))))
;
38263}
38264
38265static GType
38266bala_ccode_base_module_emit_context_get_type_once (void)
38267{
38268 static const GTypeValueTable g_define_type_value_table = { bala_ccode_base_module_value_emit_context_init, bala_ccode_base_module_value_emit_context_free_value, bala_ccode_base_module_value_emit_context_copy_value, bala_ccode_base_module_value_emit_context_peek_pointer, "p", bala_ccode_base_module_value_emit_context_collect_value, "p", bala_ccode_base_module_value_emit_context_lcopy_value };
38269 static const GTypeInfo g_define_type_info = { sizeof (BalaCCodeBaseModuleEmitContextClass), (GBaseInitFunc) NULL((void*)0), (GBaseFinalizeFunc) NULL((void*)0), (GClassInitFunc) bala_ccode_base_module_emit_context_class_init, (GClassFinalizeFunc) NULL((void*)0), NULL((void*)0), sizeof (BalaCCodeBaseModuleEmitContext), 0, (GInstanceInitFunc) bala_ccode_base_module_emit_context_instance_init, &g_define_type_value_table };
38270 static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
38271 GType bala_ccode_base_module_emit_context_type_id;
38272 bala_ccode_base_module_emit_context_type_id = g_type_register_fundamental (g_type_fundamental_next (), "BalaCCodeBaseModuleEmitContext", &g_define_type_info, &g_define_type_fundamental_info, 0);
38273 return bala_ccode_base_module_emit_context_type_id;
38274}
38275
38276GType
38277bala_ccode_base_module_emit_context_get_type (void)
38278{
38279 static volatile gsize bala_ccode_base_module_emit_context_type_id__volatile = 0;
38280 if (g_once_init_enter (&bala_ccode_base_module_emit_context_type_id__volatile)(__extension__ ({ _Static_assert (sizeof *(&bala_ccode_base_module_emit_context_type_id__volatile
) == sizeof (gpointer), "Expression evaluates to false"); (void
) (0 ? (gpointer) *(&bala_ccode_base_module_emit_context_type_id__volatile
) : ((void*)0)); (!(__extension__ ({ _Static_assert (sizeof *
(&bala_ccode_base_module_emit_context_type_id__volatile) ==
sizeof (gpointer), "Expression evaluates to false"); gpointer
gapg_temp_newval; gpointer *gapg_temp_atomic = (gpointer *)(
&bala_ccode_base_module_emit_context_type_id__volatile); __atomic_load
(gapg_temp_atomic, &gapg_temp_newval, 5); gapg_temp_newval
; })) && g_once_init_enter (&bala_ccode_base_module_emit_context_type_id__volatile
)); }))
) {
38281 GType bala_ccode_base_module_emit_context_type_id;
38282 bala_ccode_base_module_emit_context_type_id = bala_ccode_base_module_emit_context_get_type_once ();
38283 g_once_init_leave (&bala_ccode_base_module_emit_context_type_id__volatile, bala_ccode_base_module_emit_context_type_id)(__extension__ ({ _Static_assert (sizeof *(&bala_ccode_base_module_emit_context_type_id__volatile
) == sizeof (gpointer), "Expression evaluates to false"); 0 ?
(void) (*(&bala_ccode_base_module_emit_context_type_id__volatile
) = (bala_ccode_base_module_emit_context_type_id)) : (void) 0
; g_once_init_leave ((&bala_ccode_base_module_emit_context_type_id__volatile
), (gsize) (bala_ccode_base_module_emit_context_type_id)); })
)
;
38284 }
38285 return bala_ccode_base_module_emit_context_type_id__volatile;
38286}
38287
38288gpointer
38289bala_ccode_base_module_emit_context_ref (gpointer instance)
38290{
38291 BalaCCodeBaseModuleEmitContext * self;
38292 self = instance;
38293 g_atomic_int_inc (&self->ref_count)(__extension__ ({ _Static_assert (sizeof *(&self->ref_count
) == sizeof (gint), "Expression evaluates to false"); (void) (
0 ? *(&self->ref_count) ^ *(&self->ref_count) :
1); (void) __atomic_fetch_add ((&self->ref_count), 1,
5); }))
;
38294 return instance;
38295}
38296
38297void
38298bala_ccode_base_module_emit_context_unref (gpointer instance)
38299{
38300 BalaCCodeBaseModuleEmitContext * self;
38301 self = instance;
38302 if (g_atomic_int_dec_and_test (&self->ref_count)(__extension__ ({ _Static_assert (sizeof *(&self->ref_count
) == sizeof (gint), "Expression evaluates to false"); (void) (
0 ? *(&self->ref_count) ^ *(&self->ref_count) :
1); __atomic_fetch_sub ((&self->ref_count), 1, 5) == 1
; }))
) {
38303 BALA_CCODE_BASE_MODULE_EMIT_CONTEXT_GET_CLASS (self)((((BalaCCodeBaseModuleEmitContextClass*) (((GTypeInstance*) (
(self)))->g_class))))
->finalize (self);
38304 g_type_free_instance ((GTypeInstance *) self);
38305 }
38306}
38307
38308static void
38309bala_ccode_base_module_class_init (BalaCCodeBaseModuleClass * klass,
38310 gpointer klass_data)
38311{
38312 bala_ccode_base_module_parent_class = g_type_class_peek_parent (klass);
38313 ((BalaCodeVisitorClass *) klass)->finalize = bala_ccode_base_module_finalize;
38314 g_type_class_adjust_private_offset (klass, &BalaCCodeBaseModule_private_offset);
38315 ((BalaCodeGeneratorClass *) klass)->emit = (void (*) (BalaCodeGenerator*, BalaCodeContext*)) bala_ccode_base_module_real_emit;
38316 ((BalaCCodeBaseModuleClass *) klass)->append_bala_array_free = (void (*) (BalaCCodeBaseModule*)) bala_ccode_base_module_real_append_bala_array_free;
38317 ((BalaCCodeBaseModuleClass *) klass)->append_bala_array_move = (void (*) (BalaCCodeBaseModule*)) bala_ccode_base_module_real_append_bala_array_move;
38318 ((BalaCCodeBaseModuleClass *) klass)->append_bala_array_length = (void (*) (BalaCCodeBaseModule*)) bala_ccode_base_module_real_append_bala_array_length;
38319 ((BalaCCodeBaseModuleClass *) klass)->append_params_array = (void (*) (BalaCCodeBaseModule*, BalaMethod*)) bala_ccode_base_module_real_append_params_array;
38320 ((BalaCodeVisitorClass *) klass)->visit_source_file = (void (*) (BalaCodeVisitor*, BalaSourceFile*)) bala_ccode_base_module_real_visit_source_file;
38321 ((BalaCCodeBaseModuleClass *) klass)->generate_enum_declaration = (gboolean (*) (BalaCCodeBaseModule*, BalaEnum*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_enum_declaration;
38322 ((BalaCodeVisitorClass *) klass)->visit_enum = (void (*) (BalaCodeVisitor*, BalaEnum*)) bala_ccode_base_module_real_visit_enum;
38323 ((BalaCodeVisitorClass *) klass)->visit_constant = (void (*) (BalaCodeVisitor*, BalaConstant*)) bala_ccode_base_module_real_visit_constant;
38324 ((BalaCodeVisitorClass *) klass)->visit_field = (void (*) (BalaCodeVisitor*, BalaField*)) bala_ccode_base_module_real_visit_field;
38325 ((BalaCodeVisitorClass *) klass)->visit_property = (void (*) (BalaCodeVisitor*, BalaProperty*)) bala_ccode_base_module_real_visit_property;
38326 ((BalaCCodeBaseModuleClass *) klass)->generate_class_struct_declaration = (void (*) (BalaCCodeBaseModule*, BalaClass*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_class_struct_declaration;
38327 ((BalaCCodeBaseModuleClass *) klass)->generate_struct_declaration = (void (*) (BalaCCodeBaseModule*, BalaStruct*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_struct_declaration;
38328 ((BalaCCodeBaseModuleClass *) klass)->generate_delegate_declaration = (void (*) (BalaCCodeBaseModule*, BalaDelegate*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_delegate_declaration;
38329 ((BalaCCodeBaseModuleClass *) klass)->generate_cparameters = (void (*) (BalaCCodeBaseModule*, BalaMethod*, BalaCCodeFile*, BalaMap*, BalaCCodeFunction*, BalaCCodeFunctionDeclarator*, BalaMap*, BalaCCodeFunctionCall*, gint)) bala_ccode_base_module_real_generate_cparameters;
38330 ((BalaCodeVisitorClass *) klass)->visit_property_accessor = (void (*) (BalaCodeVisitor*, BalaPropertyAccessor*)) bala_ccode_base_module_real_visit_property_accessor;
38331 ((BalaCodeVisitorClass *) klass)->visit_destructor = (void (*) (BalaCodeVisitor*, BalaDestructor*)) bala_ccode_base_module_real_visit_destructor;
38332 ((BalaCodeVisitorClass *) klass)->visit_block = (void (*) (BalaCodeVisitor*, BalaBlock*)) bala_ccode_base_module_real_visit_block;
38333 ((BalaCodeVisitorClass *) klass)->visit_declaration_statement = (void (*) (BalaCodeVisitor*, BalaDeclarationStatement*)) bala_ccode_base_module_real_visit_declaration_statement;
38334 ((BalaCodeVisitorClass *) klass)->visit_local_variable = (void (*) (BalaCodeVisitor*, BalaLocalVariable*)) bala_ccode_base_module_real_visit_local_variable;
38335 ((BalaCodeVisitorClass *) klass)->visit_initializer_list = (void (*) (BalaCodeVisitor*, BalaInitializerList*)) bala_ccode_base_module_real_visit_initializer_list;
38336 ((BalaCCodeBaseModuleClass *) klass)->get_dup_func_expression = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaDataType*, BalaSourceReference*, gboolean)) bala_ccode_base_module_real_get_dup_func_expression;
38337 ((BalaCCodeBaseModuleClass *) klass)->append_struct_array_destroy = (gchar* (*) (BalaCCodeBaseModule*, BalaStruct*)) bala_ccode_base_module_real_append_struct_array_destroy;
38338 ((BalaCCodeBaseModuleClass *) klass)->append_struct_array_free = (gchar* (*) (BalaCCodeBaseModule*, BalaStruct*)) bala_ccode_base_module_real_append_struct_array_free;
38339 ((BalaCCodeBaseModuleClass *) klass)->destroy_value = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaTargetValue*, gboolean)) bala_ccode_base_module_real_destroy_value;
38340 ((BalaCodeVisitorClass *) klass)->visit_end_full_expression = (void (*) (BalaCodeVisitor*, BalaExpression*)) bala_ccode_base_module_real_visit_end_full_expression;
38341 ((BalaCodeVisitorClass *) klass)->visit_expression_statement = (void (*) (BalaCodeVisitor*, BalaExpressionStatement*)) bala_ccode_base_module_real_visit_expression_statement;
38342 ((BalaCCodeBaseModuleClass *) klass)->append_scope_free = (void (*) (BalaCCodeBaseModule*, BalaSymbol*, BalaCodeNode*)) bala_ccode_base_module_real_append_scope_free;
38343 ((BalaCodeVisitorClass *) klass)->visit_return_statement = (void (*) (BalaCodeVisitor*, BalaReturnStatement*)) bala_ccode_base_module_real_visit_return_statement;
38344 ((BalaCodeVisitorClass *) klass)->visit_lock_statement = (void (*) (BalaCodeVisitor*, BalaLockStatement*)) bala_ccode_base_module_real_visit_lock_statement;
38345 ((BalaCodeVisitorClass *) klass)->visit_unlock_statement = (void (*) (BalaCodeVisitor*, BalaUnlockStatement*)) bala_ccode_base_module_real_visit_unlock_statement;
38346 ((BalaCodeVisitorClass *) klass)->visit_delete_statement = (void (*) (BalaCodeVisitor*, BalaDeleteStatement*)) bala_ccode_base_module_real_visit_delete_statement;
38347 ((BalaCodeVisitorClass *) klass)->visit_expression = (void (*) (BalaCodeVisitor*, BalaExpression*)) bala_ccode_base_module_real_visit_expression;
38348 ((BalaCodeVisitorClass *) klass)->visit_boolean_literal = (void (*) (BalaCodeVisitor*, BalaBooleanLiteral*)) bala_ccode_base_module_real_visit_boolean_literal;
38349 ((BalaCodeVisitorClass *) klass)->visit_character_literal = (void (*) (BalaCodeVisitor*, BalaCharacterLiteral*)) bala_ccode_base_module_real_visit_character_literal;
38350 ((BalaCodeVisitorClass *) klass)->visit_integer_literal = (void (*) (BalaCodeVisitor*, BalaIntegerLiteral*)) bala_ccode_base_module_real_visit_integer_literal;
38351 ((BalaCodeVisitorClass *) klass)->visit_real_literal = (void (*) (BalaCodeVisitor*, BalaRealLiteral*)) bala_ccode_base_module_real_visit_real_literal;
38352 ((BalaCodeVisitorClass *) klass)->visit_string_literal = (void (*) (BalaCodeVisitor*, BalaStringLiteral*)) bala_ccode_base_module_real_visit_string_literal;
38353 ((BalaCodeVisitorClass *) klass)->visit_regex_literal = (void (*) (BalaCodeVisitor*, BalaRegexLiteral*)) bala_ccode_base_module_real_visit_regex_literal;
38354 ((BalaCodeVisitorClass *) klass)->visit_null_literal = (void (*) (BalaCodeVisitor*, BalaNullLiteral*)) bala_ccode_base_module_real_visit_null_literal;
38355 ((BalaCCodeBaseModuleClass *) klass)->get_local_cvalue = (BalaTargetValue* (*) (BalaCCodeBaseModule*, BalaLocalVariable*)) bala_ccode_base_module_real_get_local_cvalue;
38356 ((BalaCCodeBaseModuleClass *) klass)->get_parameter_cvalue = (BalaTargetValue* (*) (BalaCCodeBaseModule*, BalaParameter*)) bala_ccode_base_module_real_get_parameter_cvalue;
38357 ((BalaCCodeBaseModuleClass *) klass)->get_field_cvalue = (BalaTargetValue* (*) (BalaCCodeBaseModule*, BalaField*, BalaTargetValue*)) bala_ccode_base_module_real_get_field_cvalue;
38358 ((BalaCCodeBaseModuleClass *) klass)->load_variable = (BalaTargetValue* (*) (BalaCCodeBaseModule*, BalaVariable*, BalaTargetValue*, BalaExpression*)) bala_ccode_base_module_real_load_variable;
38359 ((BalaCCodeBaseModuleClass *) klass)->load_this_parameter = (BalaTargetValue* (*) (BalaCCodeBaseModule*, BalaTypeSymbol*)) bala_ccode_base_module_real_load_this_parameter;
38360 ((BalaCCodeBaseModuleClass *) klass)->store_value = (void (*) (BalaCCodeBaseModule*, BalaTargetValue*, BalaTargetValue*, BalaSourceReference*)) bala_ccode_base_module_real_store_value;
38361 ((BalaCCodeBaseModuleClass *) klass)->get_delegate_target_cname = (gchar* (*) (BalaCCodeBaseModule*, const gchar*)) bala_ccode_base_module_real_get_delegate_target_cname;
38362 ((BalaCCodeBaseModuleClass *) klass)->get_delegate_target_cexpression = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaExpression*, BalaCCodeExpression* *)) bala_ccode_base_module_real_get_delegate_target_cexpression;
38363 ((BalaCCodeBaseModuleClass *) klass)->get_delegate_target_cvalue = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaTargetValue*)) bala_ccode_base_module_real_get_delegate_target_cvalue;
38364 ((BalaCCodeBaseModuleClass *) klass)->get_delegate_target_destroy_notify_cvalue = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaTargetValue*)) bala_ccode_base_module_real_get_delegate_target_destroy_notify_cvalue;
38365 ((BalaCCodeBaseModuleClass *) klass)->get_delegate_target_destroy_notify_cname = (gchar* (*) (BalaCCodeBaseModule*, const gchar*)) bala_ccode_base_module_real_get_delegate_target_destroy_notify_cname;
38366 ((BalaCodeVisitorClass *) klass)->visit_base_access = (void (*) (BalaCodeVisitor*, BalaBaseAccess*)) bala_ccode_base_module_real_visit_base_access;
38367 ((BalaCodeVisitorClass *) klass)->visit_postfix_expression = (void (*) (BalaCodeVisitor*, BalaPostfixExpression*)) bala_ccode_base_module_real_visit_postfix_expression;
38368 ((BalaCCodeBaseModuleClass *) klass)->copy_value = (BalaTargetValue* (*) (BalaCCodeBaseModule*, BalaTargetValue*, BalaCodeNode*)) bala_ccode_base_module_real_copy_value;
38369 ((BalaCCodeBaseModuleClass *) klass)->generate_class_declaration = (void (*) (BalaCCodeBaseModule*, BalaClass*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_class_declaration;
38370 ((BalaCCodeBaseModuleClass *) klass)->generate_interface_declaration = (void (*) (BalaCCodeBaseModule*, BalaInterface*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_interface_declaration;
38371 ((BalaCCodeBaseModuleClass *) klass)->generate_method_declaration = (gboolean (*) (BalaCCodeBaseModule*, BalaMethod*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_method_declaration;
38372 ((BalaCCodeBaseModuleClass *) klass)->generate_error_domain_declaration = (void (*) (BalaCCodeBaseModule*, BalaErrorDomain*, BalaCCodeFile*)) bala_ccode_base_module_real_generate_error_domain_declaration;
38373 ((BalaCodeVisitorClass *) klass)->visit_object_creation_expression = (void (*) (BalaCodeVisitor*, BalaObjectCreationExpression*)) bala_ccode_base_module_real_visit_object_creation_expression;
38374 ((BalaCodeVisitorClass *) klass)->visit_sizeof_expression = (void (*) (BalaCodeVisitor*, BalaSizeofExpression*)) bala_ccode_base_module_real_visit_sizeof_expression;
38375 ((BalaCodeVisitorClass *) klass)->visit_typeof_expression = (void (*) (BalaCodeVisitor*, BalaTypeofExpression*)) bala_ccode_base_module_real_visit_typeof_expression;
38376 ((BalaCodeVisitorClass *) klass)->visit_unary_expression = (void (*) (BalaCodeVisitor*, BalaUnaryExpression*)) bala_ccode_base_module_real_visit_unary_expression;
38377 ((BalaCCodeBaseModuleClass *) klass)->deserialize_expression = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaDataType*, BalaCCodeExpression*, BalaCCodeExpression*, BalaCCodeExpression*, gboolean*)) bala_ccode_base_module_real_deserialize_expression;
38378 ((BalaCCodeBaseModuleClass *) klass)->serialize_expression = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaDataType*, BalaCCodeExpression*)) bala_ccode_base_module_real_serialize_expression;
38379 ((BalaCodeVisitorClass *) klass)->visit_cast_expression = (void (*) (BalaCodeVisitor*, BalaCastExpression*)) bala_ccode_base_module_real_visit_cast_expression;
38380 ((BalaCodeVisitorClass *) klass)->visit_named_argument = (void (*) (BalaCodeVisitor*, BalaNamedArgument*)) bala_ccode_base_module_real_visit_named_argument;
38381 ((BalaCodeVisitorClass *) klass)->visit_pointer_indirection = (void (*) (BalaCodeVisitor*, BalaPointerIndirection*)) bala_ccode_base_module_real_visit_pointer_indirection;
38382 ((BalaCodeVisitorClass *) klass)->visit_addressof_expression = (void (*) (BalaCodeVisitor*, BalaAddressofExpression*)) bala_ccode_base_module_real_visit_addressof_expression;
38383 ((BalaCodeVisitorClass *) klass)->visit_reference_transfer_expression = (void (*) (BalaCodeVisitor*, BalaReferenceTransferExpression*)) bala_ccode_base_module_real_visit_reference_transfer_expression;
38384 ((BalaCodeVisitorClass *) klass)->visit_binary_expression = (void (*) (BalaCodeVisitor*, BalaBinaryExpression*)) bala_ccode_base_module_real_visit_binary_expression;
38385 ((BalaCodeVisitorClass *) klass)->visit_type_check = (void (*) (BalaCodeVisitor*, BalaTypeCheck*)) bala_ccode_base_module_real_visit_type_check;
38386 ((BalaCodeVisitorClass *) klass)->visit_lambda_expression = (void (*) (BalaCodeVisitor*, BalaLambdaExpression*)) bala_ccode_base_module_real_visit_lambda_expression;
38387 ((BalaCCodeBaseModuleClass *) klass)->get_implicit_cast_expression = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaCCodeExpression*, BalaDataType*, BalaDataType*, BalaCodeNode*)) bala_ccode_base_module_real_get_implicit_cast_expression;
38388 ((BalaCCodeBaseModuleClass *) klass)->create_type_check_statement = (void (*) (BalaCCodeBaseModule*, BalaCodeNode*, BalaDataType*, BalaTypeSymbol*, gboolean, const gchar*)) bala_ccode_base_module_real_create_type_check_statement;
38389 ((BalaCodeVisitorClass *) klass)->visit_class = (void (*) (BalaCodeVisitor*, BalaClass*)) bala_ccode_base_module_real_visit_class;
38390 ((BalaCCodeBaseModuleClass *) klass)->generate_dynamic_method_wrapper = (void (*) (BalaCCodeBaseModule*, BalaDynamicMethod*)) bala_ccode_base_module_real_generate_dynamic_method_wrapper;
38391 ((BalaCCodeBaseModuleClass *) klass)->method_has_wrapper = (gboolean (*) (BalaCCodeBaseModule*, BalaMethod*)) bala_ccode_base_module_real_method_has_wrapper;
38392 ((BalaCCodeBaseModuleClass *) klass)->get_param_spec_cexpression = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaProperty*)) bala_ccode_base_module_real_get_param_spec_cexpression;
38393 ((BalaCCodeBaseModuleClass *) klass)->get_param_spec = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaProperty*)) bala_ccode_base_module_real_get_param_spec;
38394 ((BalaCCodeBaseModuleClass *) klass)->get_signal_creation = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaSignal*, BalaObjectTypeSymbol*)) bala_ccode_base_module_real_get_signal_creation;
38395 ((BalaCCodeBaseModuleClass *) klass)->get_value_getter_function = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaDataType*)) bala_ccode_base_module_real_get_value_getter_function;
38396 ((BalaCCodeBaseModuleClass *) klass)->get_value_setter_function = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaDataType*)) bala_ccode_base_module_real_get_value_setter_function;
38397 ((BalaCCodeBaseModuleClass *) klass)->get_value_taker_function = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaDataType*)) bala_ccode_base_module_real_get_value_taker_function;
38398 ((BalaCCodeBaseModuleClass *) klass)->register_dbus_info = (void (*) (BalaCCodeBaseModule*, BalaCCodeBlock*, BalaObjectTypeSymbol*)) bala_ccode_base_module_real_register_dbus_info;
38399 ((BalaCCodeBaseModuleClass *) klass)->get_dynamic_property_getter_cname = (gchar* (*) (BalaCCodeBaseModule*, BalaDynamicProperty*)) bala_ccode_base_module_real_get_dynamic_property_getter_cname;
38400 ((BalaCCodeBaseModuleClass *) klass)->get_dynamic_property_setter_cname = (gchar* (*) (BalaCCodeBaseModule*, BalaDynamicProperty*)) bala_ccode_base_module_real_get_dynamic_property_setter_cname;
38401 ((BalaCCodeBaseModuleClass *) klass)->get_dynamic_signal_cname = (gchar* (*) (BalaCCodeBaseModule*, BalaDynamicSignal*)) bala_ccode_base_module_real_get_dynamic_signal_cname;
38402 ((BalaCCodeBaseModuleClass *) klass)->get_dynamic_signal_connect_wrapper_name = (gchar* (*) (BalaCCodeBaseModule*, BalaDynamicSignal*)) bala_ccode_base_module_real_get_dynamic_signal_connect_wrapper_name;
38403 ((BalaCCodeBaseModuleClass *) klass)->get_dynamic_signal_connect_after_wrapper_name = (gchar* (*) (BalaCCodeBaseModule*, BalaDynamicSignal*)) bala_ccode_base_module_real_get_dynamic_signal_connect_after_wrapper_name;
38404 ((BalaCCodeBaseModuleClass *) klass)->get_dynamic_signal_disconnect_wrapper_name = (gchar* (*) (BalaCCodeBaseModule*, BalaDynamicSignal*)) bala_ccode_base_module_real_get_dynamic_signal_disconnect_wrapper_name;
38405 ((BalaCCodeBaseModuleClass *) klass)->get_array_length_cname = (gchar* (*) (BalaCCodeBaseModule*, const gchar*, gint)) bala_ccode_base_module_real_get_array_length_cname;
38406 ((BalaCCodeBaseModuleClass *) klass)->get_variable_array_length_cname = (gchar* (*) (BalaCCodeBaseModule*, BalaVariable*, gint)) bala_ccode_base_module_real_get_variable_array_length_cname;
38407 ((BalaCCodeBaseModuleClass *) klass)->get_array_length_cexpression = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaExpression*, gint)) bala_ccode_base_module_real_get_array_length_cexpression;
38408 ((BalaCCodeBaseModuleClass *) klass)->get_array_length_cvalue = (BalaCCodeExpression* (*) (BalaCCodeBaseModule*, BalaTargetValue*, gint)) bala_ccode_base_module_real_get_array_length_cvalue;
38409 ((BalaCCodeBaseModuleClass *) klass)->get_array_size_cname = (gchar* (*) (BalaCCodeBaseModule*, const gchar*)) bala_ccode_base_module_real_get_array_size_cname;
38410 ((BalaCCodeBaseModuleClass *) klass)->add_simple_check = (void (*) (BalaCCodeBaseModule*, BalaCodeNode*, gboolean)) bala_ccode_base_module_real_add_simple_check;
38411 ((BalaCCodeBaseModuleClass *) klass)->generate_ready_function = (gchar* (*) (BalaCCodeBaseModule*, BalaMethod*)) bala_ccode_base_module_real_generate_ready_function;
38412 bala_ccode_base_module_ccode_attribute_cache_index = bala_code_node_get_attribute_cache_index ();
38413}
38414
38415static void
38416bala_ccode_base_module_instance_init (BalaCCodeBaseModule * self,
38417 gpointer klass)
38418{
38419 BalaCCodeBaseModuleEmitContext* _tmp0_;
38420 GEqualFunc _tmp1_;
38421 BalaArrayList* _tmp2_;
38422 GEqualFunc _tmp3_;
38423 BalaArrayList* _tmp4_;
38424 GHashFunc _tmp5_;
38425 GEqualFunc _tmp6_;
38426 GEqualFunc _tmp7_;
38427 BalaHashMap* _tmp8_;
38428 GHashFunc _tmp9_;
38429 GEqualFunc _tmp10_;
38430 GEqualFunc _tmp11_;
38431 BalaHashMap* _tmp12_;
38432 BalaVoidType* _tmp13_;
38433 self->priv = bala_ccode_base_module_get_instance_private (self);
38434 _tmp0_ = bala_ccode_base_module_emit_context_new (NULL((void*)0));
38435 self->emit_context = _tmp0_;
38436 _tmp1_ = g_direct_equal;
38437 _tmp2_ = bala_array_list_new (BALA_CCODE_BASE_MODULE_TYPE_EMIT_CONTEXT(bala_ccode_base_module_emit_context_get_type ()), (GBoxedCopyFunc) bala_ccode_base_module_emit_context_ref, (GDestroyNotify) bala_ccode_base_module_emit_context_unref, _tmp1_);
38438 self->priv->emit_context_stack = (BalaList*) _tmp2_;
38439 self->current_line = NULL((void*)0);
38440 _tmp3_ = g_direct_equal;
38441 _tmp4_ = bala_array_list_new (BALA_TYPE_CCODE_LINE_DIRECTIVE(bala_ccode_line_directive_get_type ()), (GBoxedCopyFunc) bala_ccode_node_ref, (GDestroyNotify) bala_ccode_node_unref, _tmp3_);
38442 self->priv->line_directive_stack = (BalaList*) _tmp4_;
38443 self->next_regex_id = 0;
38444 self->priv->next_block_id = 0;
38445 _tmp5_ = g_direct_hash;
38446 _tmp6_ = g_direct_equal;
38447 _tmp7_ = g_direct_equal;
38448 _tmp8_ = bala_hash_map_new (BALA_TYPE_BLOCK(bala_block_get_type ()), (GBoxedCopyFunc) bala_code_node_ref, (GDestroyNotify) bala_code_node_unref, G_TYPE_INT((GType) ((6) << (2))), NULL((void*)0), NULL((void*)0), _tmp5_, _tmp6_, _tmp7_);
38449 self->priv->block_map = (BalaMap*) _tmp8_;
38450 _tmp9_ = g_direct_hash;
38451 _tmp10_ = g_direct_equal;
38452 _tmp11_ = g_direct_equal;
38453 _tmp12_ = bala_hash_map_new (BALA_TYPE_METHOD(bala_method_get_type ()), NULL((void*)0), NULL((void*)0), G_TYPE_INT((GType) ((6) << (2))), NULL((void*)0), NULL((void*)0), _tmp9_, _tmp10_, _tmp11_);
38454 self->priv->method_inner_error_var_count = (BalaMap*) _tmp12_;
38455 _tmp13_ = bala_void_type_new (NULL((void*)0));
38456 self->void_type = (BalaDataType*) _tmp13_;
38457 self->in_plugin = FALSE(0);
38458 self->priv->next_variant_function_id = 0;
38459}
38460
38461static void
38462bala_ccode_base_module_finalize (BalaCodeVisitor * obj)
38463{
38464 BalaCCodeBaseModule * self;
38465 self = G_TYPE_CHECK_INSTANCE_CAST (obj, BALA_TYPE_CCODE_BASE_MODULE, BalaCCodeBaseModule)(((BalaCCodeBaseModule*) g_type_check_instance_cast ((GTypeInstance
*) (obj), ((bala_ccode_base_module_get_type ())))))
;
38466 _bala_code_context_unref0 (self->priv->_context)((self->priv->_context == ((void*)0)) ? ((void*)0) : (self
->priv->_context = (bala_code_context_unref (self->priv
->_context), ((void*)0))))
;
38467 _bala_code_node_unref0 (self->root_symbol)((self->root_symbol == ((void*)0)) ? ((void*)0) : (self->
root_symbol = (bala_code_node_unref (self->root_symbol), (
(void*)0))))
;
38468 _bala_ccode_base_module_emit_context_unref0 (self->emit_context)((self->emit_context == ((void*)0)) ? ((void*)0) : (self->
emit_context = (bala_ccode_base_module_emit_context_unref (self
->emit_context), ((void*)0))))
;
38469 _bala_iterable_unref0 (self->priv->emit_context_stack)((self->priv->emit_context_stack == ((void*)0)) ? ((void
*)0) : (self->priv->emit_context_stack = (bala_iterable_unref
(self->priv->emit_context_stack), ((void*)0))))
;
38470 _bala_ccode_node_unref0 (self->current_line)((self->current_line == ((void*)0)) ? ((void*)0) : (self->
current_line = (bala_ccode_node_unref (self->current_line)
, ((void*)0))))
;
38471 _bala_iterable_unref0 (self->priv->line_directive_stack)((self->priv->line_directive_stack == ((void*)0)) ? ((void
*)0) : (self->priv->line_directive_stack = (bala_iterable_unref
(self->priv->line_directive_stack), ((void*)0))))
;
38472 _bala_ccode_file_unref0 (self->header_file)((self->header_file == ((void*)0)) ? ((void*)0) : (self->
header_file = (bala_ccode_file_unref (self->header_file), (
(void*)0))))
;
38473 _bala_ccode_file_unref0 (self->internal_header_file)((self->internal_header_file == ((void*)0)) ? ((void*)0) :
(self->internal_header_file = (bala_ccode_file_unref (self
->internal_header_file), ((void*)0))))
;
38474 _bala_ccode_file_unref0 (self->cfile)((self->cfile == ((void*)0)) ? ((void*)0) : (self->cfile
= (bala_ccode_file_unref (self->cfile), ((void*)0))))
;
38475 _bala_ccode_base_module_emit_context_unref0 (self->class_init_context)((self->class_init_context == ((void*)0)) ? ((void*)0) : (
self->class_init_context = (bala_ccode_base_module_emit_context_unref
(self->class_init_context), ((void*)0))))
;
38476 _bala_ccode_base_module_emit_context_unref0 (self->base_init_context)((self->base_init_context == ((void*)0)) ? ((void*)0) : (self
->base_init_context = (bala_ccode_base_module_emit_context_unref
(self->base_init_context), ((void*)0))))
;
38477 _bala_ccode_base_module_emit_context_unref0 (self->class_finalize_context)((self->class_finalize_context == ((void*)0)) ? ((void*)0)
: (self->class_finalize_context = (bala_ccode_base_module_emit_context_unref
(self->class_finalize_context), ((void*)0))))
;
38478 _bala_ccode_base_module_emit_context_unref0 (self->base_finalize_context)((self->base_finalize_context == ((void*)0)) ? ((void*)0) :
(self->base_finalize_context = (bala_ccode_base_module_emit_context_unref
(self->base_finalize_context), ((void*)0))))
;
38479 _bala_ccode_base_module_emit_context_unref0 (self->instance_init_context)((self->instance_init_context == ((void*)0)) ? ((void*)0) :
(self->instance_init_context = (bala_ccode_base_module_emit_context_unref
(self->instance_init_context), ((void*)0))))
;
38480 _bala_ccode_base_module_emit_context_unref0 (self->instance_finalize_context)((self->instance_finalize_context == ((void*)0)) ? ((void*
)0) : (self->instance_finalize_context = (bala_ccode_base_module_emit_context_unref
(self->instance_finalize_context), ((void*)0))))
;
38481 _bala_ccode_node_unref0 (self->param_spec_struct)((self->param_spec_struct == ((void*)0)) ? ((void*)0) : (self
->param_spec_struct = (bala_ccode_node_unref (self->param_spec_struct
), ((void*)0))))
;
38482 _bala_ccode_node_unref0 (self->closure_struct)((self->closure_struct == ((void*)0)) ? ((void*)0) : (self
->closure_struct = (bala_ccode_node_unref (self->closure_struct
), ((void*)0))))
;
38483 _bala_ccode_node_unref0 (self->prop_enum)((self->prop_enum == ((void*)0)) ? ((void*)0) : (self->
prop_enum = (bala_ccode_node_unref (self->prop_enum), ((void
*)0))))
;
38484 _bala_ccode_node_unref0 (self->signal_enum)((self->signal_enum == ((void*)0)) ? ((void*)0) : (self->
signal_enum = (bala_ccode_node_unref (self->signal_enum), (
(void*)0))))
;
38485 _bala_iterable_unref0 (self->user_marshal_set)((self->user_marshal_set == ((void*)0)) ? ((void*)0) : (self
->user_marshal_set = (bala_iterable_unref (self->user_marshal_set
), ((void*)0))))
;
38486 _bala_iterable_unref0 (self->predefined_marshal_set)((self->predefined_marshal_set == ((void*)0)) ? ((void*)0)
: (self->predefined_marshal_set = (bala_iterable_unref (self
->predefined_marshal_set), ((void*)0))))
;
38487 _bala_map_unref0 (self->priv->block_map)((self->priv->block_map == ((void*)0)) ? ((void*)0) : (
self->priv->block_map = (bala_map_unref (self->priv->
block_map), ((void*)0))))
;
38488 _bala_map_unref0 (self->priv->method_inner_error_var_count)((self->priv->method_inner_error_var_count == ((void*)0
)) ? ((void*)0) : (self->priv->method_inner_error_var_count
= (bala_map_unref (self->priv->method_inner_error_var_count
), ((void*)0))))
;
38489 _bala_code_node_unref0 (self->void_type)((self->void_type == ((void*)0)) ? ((void*)0) : (self->
void_type = (bala_code_node_unref (self->void_type), ((void
*)0))))
;
38490 _bala_code_node_unref0 (self->bool_type)((self->bool_type == ((void*)0)) ? ((void*)0) : (self->
bool_type = (bala_code_node_unref (self->bool_type), ((void
*)0))))
;
38491 _bala_code_node_unref0 (self->char_type)((self->char_type == ((void*)0)) ? ((void*)0) : (self->
char_type = (bala_code_node_unref (self->char_type), ((void
*)0))))
;
38492 _bala_code_node_unref0 (self->uchar_type)((self->uchar_type == ((void*)0)) ? ((void*)0) : (self->
uchar_type = (bala_code_node_unref (self->uchar_type), ((void
*)0))))
;
38493 _bala_code_node_unref0 (self->unichar_type)((self->unichar_type == ((void*)0)) ? ((void*)0) : (self->
unichar_type = (bala_code_node_unref (self->unichar_type),
((void*)0))))
;
38494 _bala_code_node_unref0 (self->short_type)((self->short_type == ((void*)0)) ? ((void*)0) : (self->
short_type = (bala_code_node_unref (self->short_type), ((void
*)0))))
;
38495 _bala_code_node_unref0 (self->ushort_type)((self->ushort_type == ((void*)0)) ? ((void*)0) : (self->
ushort_type = (bala_code_node_unref (self->ushort_type), (
(void*)0))))
;
38496 _bala_code_node_unref0 (self->int_type)((self->int_type == ((void*)0)) ? ((void*)0) : (self->int_type
= (bala_code_node_unref (self->int_type), ((void*)0))))
;
38497 _bala_code_node_unref0 (self->uint_type)((self->uint_type == ((void*)0)) ? ((void*)0) : (self->
uint_type = (bala_code_node_unref (self->uint_type), ((void
*)0))))
;
38498 _bala_code_node_unref0 (self->long_type)((self->long_type == ((void*)0)) ? ((void*)0) : (self->
long_type = (bala_code_node_unref (self->long_type), ((void
*)0))))
;
38499 _bala_code_node_unref0 (self->ulong_type)((self->ulong_type == ((void*)0)) ? ((void*)0) : (self->
ulong_type = (bala_code_node_unref (self->ulong_type), ((void
*)0))))
;
38500 _bala_code_node_unref0 (self->int8_type)((self->int8_type == ((void*)0)) ? ((void*)0) : (self->
int8_type = (bala_code_node_unref (self->int8_type), ((void
*)0))))
;
38501 _bala_code_node_unref0 (self->uint8_type)((self->uint8_type == ((void*)0)) ? ((void*)0) : (self->
uint8_type = (bala_code_node_unref (self->uint8_type), ((void
*)0))))
;
38502 _bala_code_node_unref0 (self->int16_type)((self->int16_type == ((void*)0)) ? ((void*)0) : (self->
int16_type = (bala_code_node_unref (self->int16_type), ((void
*)0))))
;
38503 _bala_code_node_unref0 (self->uint16_type)((self->uint16_type == ((void*)0)) ? ((void*)0) : (self->
uint16_type = (bala_code_node_unref (self->uint16_type), (
(void*)0))))
;
38504 _bala_code_node_unref0 (self->int32_type)((self->int32_type == ((void*)0)) ? ((void*)0) : (self->
int32_type = (bala_code_node_unref (self->int32_type), ((void
*)0))))
;
38505 _bala_code_node_unref0 (self->uint32_type)((self->uint32_type == ((void*)0)) ? ((void*)0) : (self->
uint32_type = (bala_code_node_unref (self->uint32_type), (
(void*)0))))
;
38506 _bala_code_node_unref0 (self->int64_type)((self->int64_type == ((void*)0)) ? ((void*)0) : (self->
int64_type = (bala_code_node_unref (self->int64_type), ((void
*)0))))
;
38507 _bala_code_node_unref0 (self->uint64_type)((self->uint64_type == ((void*)0)) ? ((void*)0) : (self->
uint64_type = (bala_code_node_unref (self->uint64_type), (
(void*)0))))
;
38508 _bala_code_node_unref0 (self->size_t_type)((self->size_t_type == ((void*)0)) ? ((void*)0) : (self->
size_t_type = (bala_code_node_unref (self->size_t_type), (
(void*)0))))
;
38509 _bala_code_node_unref0 (self->string_type)((self->string_type == ((void*)0)) ? ((void*)0) : (self->
string_type = (bala_code_node_unref (self->string_type), (
(void*)0))))
;
38510 _bala_code_node_unref0 (self->regex_type)((self->regex_type == ((void*)0)) ? ((void*)0) : (self->
regex_type = (bala_code_node_unref (self->regex_type), ((void
*)0))))
;
38511 _bala_code_node_unref0 (self->float_type)((self->float_type == ((void*)0)) ? ((void*)0) : (self->
float_type = (bala_code_node_unref (self->float_type), ((void
*)0))))
;
38512 _bala_code_node_unref0 (self->double_type)((self->double_type == ((void*)0)) ? ((void*)0) : (self->
double_type = (bala_code_node_unref (self->double_type), (
(void*)0))))
;
38513 _bala_code_node_unref0 (self->pointer_type)((self->pointer_type == ((void*)0)) ? ((void*)0) : (self->
pointer_type = (bala_code_node_unref (self->pointer_type),
((void*)0))))
;
38514 _bala_code_node_unref0 (self->gtype_type)((self->gtype_type == ((void*)0)) ? ((void*)0) : (self->
gtype_type = (bala_code_node_unref (self->gtype_type), ((void
*)0))))
;
38515 _bala_code_node_unref0 (self->gobject_type)((self->gobject_type == ((void*)0)) ? ((void*)0) : (self->
gobject_type = (bala_code_node_unref (self->gobject_type),
((void*)0))))
;
38516 _bala_code_node_unref0 (self->gerror_type)((self->gerror_type == ((void*)0)) ? ((void*)0) : (self->
gerror_type = (bala_code_node_unref (self->gerror_type), (
(void*)0))))
;
38517 _bala_code_node_unref0 (self->glist_type)((self->glist_type == ((void*)0)) ? ((void*)0) : (self->
glist_type = (bala_code_node_unref (self->glist_type), ((void
*)0))))
;
38518 _bala_code_node_unref0 (self->gslist_type)((self->gslist_type == ((void*)0)) ? ((void*)0) : (self->
gslist_type = (bala_code_node_unref (self->gslist_type), (
(void*)0))))
;
38519 _bala_code_node_unref0 (self->gnode_type)((self->gnode_type == ((void*)0)) ? ((void*)0) : (self->
gnode_type = (bala_code_node_unref (self->gnode_type), ((void
*)0))))
;
38520 _bala_code_node_unref0 (self->gqueue_type)((self->gqueue_type == ((void*)0)) ? ((void*)0) : (self->
gqueue_type = (bala_code_node_unref (self->gqueue_type), (
(void*)0))))
;
38521 _bala_code_node_unref0 (self->gvaluearray_type)((self->gvaluearray_type == ((void*)0)) ? ((void*)0) : (self
->gvaluearray_type = (bala_code_node_unref (self->gvaluearray_type
), ((void*)0))))
;
38522 _bala_code_node_unref0 (self->gstringbuilder_type)((self->gstringbuilder_type == ((void*)0)) ? ((void*)0) : (
self->gstringbuilder_type = (bala_code_node_unref (self->
gstringbuilder_type), ((void*)0))))
;
38523 _bala_code_node_unref0 (self->garray_type)((self->garray_type == ((void*)0)) ? ((void*)0) : (self->
garray_type = (bala_code_node_unref (self->garray_type), (
(void*)0))))
;
38524 _bala_code_node_unref0 (self->gbytearray_type)((self->gbytearray_type == ((void*)0)) ? ((void*)0) : (self
->gbytearray_type = (bala_code_node_unref (self->gbytearray_type
), ((void*)0))))
;
38525 _bala_code_node_unref0 (self->gptrarray_type)((self->gptrarray_type == ((void*)0)) ? ((void*)0) : (self
->gptrarray_type = (bala_code_node_unref (self->gptrarray_type
), ((void*)0))))
;
38526 _bala_code_node_unref0 (self->gthreadpool_type)((self->gthreadpool_type == ((void*)0)) ? ((void*)0) : (self
->gthreadpool_type = (bala_code_node_unref (self->gthreadpool_type
), ((void*)0))))
;
38527 _bala_code_node_unref0 (self->gquark_type)((self->gquark_type == ((void*)0)) ? ((void*)0) : (self->
gquark_type = (bala_code_node_unref (self->gquark_type), (
(void*)0))))
;
38528 _bala_code_node_unref0 (self->gvalue_type)((self->gvalue_type == ((void*)0)) ? ((void*)0) : (self->
gvalue_type = (bala_code_node_unref (self->gvalue_type), (
(void*)0))))
;
38529 _bala_code_node_unref0 (self->gvariant_type)((self->gvariant_type == ((void*)0)) ? ((void*)0) : (self->
gvariant_type = (bala_code_node_unref (self->gvariant_type
), ((void*)0))))
;
38530 _bala_code_node_unref0 (self->mutex_type)((self->mutex_type == ((void*)0)) ? ((void*)0) : (self->
mutex_type = (bala_code_node_unref (self->mutex_type), ((void
*)0))))
;
38531 _bala_code_node_unref0 (self->gmutex_type)((self->gmutex_type == ((void*)0)) ? ((void*)0) : (self->
gmutex_type = (bala_code_node_unref (self->gmutex_type), (
(void*)0))))
;
38532 _bala_code_node_unref0 (self->grecmutex_type)((self->grecmutex_type == ((void*)0)) ? ((void*)0) : (self
->grecmutex_type = (bala_code_node_unref (self->grecmutex_type
), ((void*)0))))
;
38533 _bala_code_node_unref0 (self->grwlock_type)((self->grwlock_type == ((void*)0)) ? ((void*)0) : (self->
grwlock_type = (bala_code_node_unref (self->grwlock_type),
((void*)0))))
;
38534 _bala_code_node_unref0 (self->gcond_type)((self->gcond_type == ((void*)0)) ? ((void*)0) : (self->
gcond_type = (bala_code_node_unref (self->gcond_type), ((void
*)0))))
;
38535 _bala_code_node_unref0 (self->gsource_type)((self->gsource_type == ((void*)0)) ? ((void*)0) : (self->
gsource_type = (bala_code_node_unref (self->gsource_type),
((void*)0))))
;
38536 _bala_code_node_unref0 (self->type_module_type)((self->type_module_type == ((void*)0)) ? ((void*)0) : (self
->type_module_type = (bala_code_node_unref (self->type_module_type
), ((void*)0))))
;
38537 _bala_code_node_unref0 (self->dbus_proxy_type)((self->dbus_proxy_type == ((void*)0)) ? ((void*)0) : (self
->dbus_proxy_type = (bala_code_node_unref (self->dbus_proxy_type
), ((void*)0))))
;
38538 _bala_code_node_unref0 (self->gtk_widget_type)((self->gtk_widget_type == ((void*)0)) ? ((void*)0) : (self
->gtk_widget_type = (bala_code_node_unref (self->gtk_widget_type
), ((void*)0))))
;
38539 _bala_code_node_unref0 (self->delegate_target_type)((self->delegate_target_type == ((void*)0)) ? ((void*)0) :
(self->delegate_target_type = (bala_code_node_unref (self
->delegate_target_type), ((void*)0))))
;
38540 _bala_code_node_unref0 (self->delegate_target_destroy_type)((self->delegate_target_destroy_type == ((void*)0)) ? ((void
*)0) : (self->delegate_target_destroy_type = (bala_code_node_unref
(self->delegate_target_destroy_type), ((void*)0))))
;
38541 _bala_code_node_unref0 (self->priv->destroy_notify)((self->priv->destroy_notify == ((void*)0)) ? ((void*)0
) : (self->priv->destroy_notify = (bala_code_node_unref
(self->priv->destroy_notify), ((void*)0))))
;
38542 _bala_code_node_unref0 (self->priv->gerror)((self->priv->gerror == ((void*)0)) ? ((void*)0) : (self
->priv->gerror = (bala_code_node_unref (self->priv->
gerror), ((void*)0))))
;
38543 _g_free0 (self->module_init_param_name)(self->module_init_param_name = (g_free (self->module_init_param_name
), ((void*)0)))
;
38544 _bala_iterable_unref0 (self->wrappers)((self->wrappers == ((void*)0)) ? ((void*)0) : (self->wrappers
= (bala_iterable_unref (self->wrappers), ((void*)0))))
;
38545 _bala_iterable_unref0 (self->priv->generated_external_symbols)((self->priv->generated_external_symbols == ((void*)0))
? ((void*)0) : (self->priv->generated_external_symbols
= (bala_iterable_unref (self->priv->generated_external_symbols
), ((void*)0))))
;
38546 BALA_CODE_VISITOR_CLASS (bala_ccode_base_module_parent_class)((((BalaCodeVisitorClass*) g_type_check_class_cast ((GTypeClass
*) ((bala_ccode_base_module_parent_class)), ((bala_code_visitor_get_type
()))))))
->finalize (obj);
38547}
38548
38549/**
38550 * Code visitor generating C Code.
38551 */
38552static GType
38553bala_ccode_base_module_get_type_once (void)
38554{
38555 static const GTypeInfo g_define_type_info = { sizeof (BalaCCodeBaseModuleClass), (GBaseInitFunc) NULL((void*)0), (GBaseFinalizeFunc) NULL((void*)0), (GClassInitFunc) bala_ccode_base_module_class_init, (GClassFinalizeFunc) NULL((void*)0), NULL((void*)0), sizeof (BalaCCodeBaseModule), 0, (GInstanceInitFunc) bala_ccode_base_module_instance_init, NULL((void*)0) };
38556 GType bala_ccode_base_module_type_id;
38557 bala_ccode_base_module_type_id = g_type_register_static (BALA_TYPE_CODE_GENERATOR(bala_code_generator_get_type ()), "BalaCCodeBaseModule", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
38558 BalaCCodeBaseModule_private_offset = g_type_add_instance_private (bala_ccode_base_module_type_id, sizeof (BalaCCodeBaseModulePrivate));
38559 return bala_ccode_base_module_type_id;
38560}
38561
38562GType
38563bala_ccode_base_module_get_type (void)
38564{
38565 static volatile gsize bala_ccode_base_module_type_id__volatile = 0;
38566 if (g_once_init_enter (&bala_ccode_base_module_type_id__volatile)(__extension__ ({ _Static_assert (sizeof *(&bala_ccode_base_module_type_id__volatile
) == sizeof (gpointer), "Expression evaluates to false"); (void
) (0 ? (gpointer) *(&bala_ccode_base_module_type_id__volatile
) : ((void*)0)); (!(__extension__ ({ _Static_assert (sizeof *
(&bala_ccode_base_module_type_id__volatile) == sizeof (gpointer
), "Expression evaluates to false"); gpointer gapg_temp_newval
; gpointer *gapg_temp_atomic = (gpointer *)(&bala_ccode_base_module_type_id__volatile
); __atomic_load (gapg_temp_atomic, &gapg_temp_newval, 5)
; gapg_temp_newval; })) && g_once_init_enter (&bala_ccode_base_module_type_id__volatile
)); }))
) {
38567 GType bala_ccode_base_module_type_id;
38568 bala_ccode_base_module_type_id = bala_ccode_base_module_get_type_once ();
38569 g_once_init_leave (&bala_ccode_base_module_type_id__volatile, bala_ccode_base_module_type_id)(__extension__ ({ _Static_assert (sizeof *(&bala_ccode_base_module_type_id__volatile
) == sizeof (gpointer), "Expression evaluates to false"); 0 ?
(void) (*(&bala_ccode_base_module_type_id__volatile) = (
bala_ccode_base_module_type_id)) : (void) 0; g_once_init_leave
((&bala_ccode_base_module_type_id__volatile), (gsize) (bala_ccode_base_module_type_id
)); }))
;
38570 }
38571 return bala_ccode_base_module_type_id__volatile;
38572}
38573
38574static void
38575_bala_array_destroy (gpointer array,
38576 gint array_length,
38577 GDestroyNotify destroy_func)
38578{
38579 if ((array != NULL((void*)0)) && (destroy_func != NULL((void*)0))) {
38580 gint i;
38581 for (i = 0; i < array_length; i = i + 1) {
38582 if (((gpointer*) array)[i] != NULL((void*)0)) {
38583 destroy_func (((gpointer*) array)[i]);
38584 }
38585 }
38586 }
38587}
38588
38589static void
38590_bala_array_free (gpointer array,
38591 gint array_length,
38592 GDestroyNotify destroy_func)
38593{
38594 _bala_array_destroy (array, array_length, destroy_func);
38595 g_free (array);
38596}
38597
38598static gint
38599_bala_array_length (gpointer array)
38600{
38601 gint length;
38602 length = 0;
38603 if (array) {
38604 while (((gpointer*) array)[length]) {
38605 length++;
38606 }
38607 }
38608 return length;
38609}
38610